【问题标题】:Find the JTable cell and paint it找到 JTable 单元格并绘制它
【发布时间】:2012-12-23 13:21:05
【问题描述】:

我有这些数据:

  1. 行号
  2. 列号
  3. 单元格值

我的问题是:

  1. 如何使用这些数据找到单元格?
  2. 如何在鼠标按下事件时更改 JTable 单元格的背景并在鼠标释放事件时恢复正常背景?
  3. 我可以在没有用户交互的情况下突出显示 JTable,这意味着单击其他一些 JTable 单元格我想通过使用给定的信息突出显示另一个 JTable 单元格,这可能吗?

【问题讨论】:

    标签: java swing jtable cell tablecellrenderer


    【解决方案1】:

    假设您的意思是找到单元格的矩形进行命中检测:

     Rectangle cell = table.getCellRect(row, column, false);
    

    对于背景更改,在您的 mouseListener 代码中,设置一个标记哪个单元格被击中,在按下/释放时重新绘制并实现一个自定义渲染器来检查标记。一些伪代码

     void mousePressed(MouseEvent ev) {
         // get the row/column from mouse location
         int column = table.columnAtPoint(ev.getPoint());
         int row = table.rowAtPoint(ev.getPoint());
         // set some kind of marker, f.i. as client property
         table.putClientProperty("hitColumn", column);
         table.putClientProperty("hitRow", row);
         // get the rectangle for repainting 
         Rectangle cell = table.getCellRect(column, row, false);
         table.repaint(cell);
     }
    
     void mouseReleased(MouseEvent ev) {
         // similar to reset the marker
         ....
         table.repaint(cell);
     }
    
     // custom renderer extends DefaultTableCellRenderer
    
     JComponent getTableCellRendererComponent(..., row, column ...) {
         Integer hitColumn = table.getClientProperty("hitColumn");
         Integer hitRow = ....
         if (hitColumn != null && column == hitColumn && hitRow ....) {
            setBackground(hitColor);
         } else {
             // force super to handle the background 
             setBackground(null);
         }
         return super.getTableCellRendererComponent(....);
     }
    

    【讨论】:

    • 我可以在没有用户交互的情况下执行相同的操作吗?
    • 当然 - clientProperties 是......只是属性:首先监听这些属性的变化,然后随心所欲地处理值:-)
    猜你喜欢
    • 1970-01-01
    • 2013-05-20
    • 2017-09-07
    • 2010-10-03
    • 2012-07-20
    • 1970-01-01
    • 2013-05-09
    • 2014-06-27
    • 2012-07-03
    相关资源
    最近更新 更多