找到 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个单元格并将值粘贴到另一个单元格中