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 に答える