2

我有这些数据:

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

我的问题是:

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

1 回答 1

6

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

 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(....);
 }
于 2013-01-09T13:34:01.227 回答