找到 JTable 单元格并绘制它

Posted

技术标签:

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

我有这些数据:

    行号 列号 单元格值

我的问题是:

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

【问题讨论】:

【参考方案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 是......只是属性:首先监听这些属性的变化,然后随心所欲地处理值:-)

以上是关于找到 JTable 单元格并绘制它的主要内容,如果未能解决你的问题,请参考以下文章

Vba找到第一个空单元格并平均它上面的4个单元格并将值粘贴到另一个单元格中

JTable-在单元格中绘制内容(文本)

从 cellrenderer 视图中的 JTable 复制值

如何使删除按钮删除JTable中的行?

在集合视图中找到中间单元格并更改其内容

JTable 单元格渲染器