私はこれらのデータを持っています:
- 行番号
- 列番号
- セル値
私の質問は次のとおりです。
- これらのデータを使用してセルを見つけるにはどうすればよいですか?
JTable
マウスプレスイベントでセルの背景を変更し、マウスリリースイベントで通常の背景に戻すにはどうすればよいですか?- ユーザーの操作なしでJTableを強調表示できますか?つまり、指定された情報を使用して別のJTableセルを強調表示したい他のJTableセルをクリックすることはできますか?
私はこれらのデータを持っています:
私の質問は次のとおりです。
JTable
マウスプレスイベントでセルの背景を変更し、マウスリリースイベントで通常の背景に戻すにはどうすればよいですか?ヒット検出のためにセルの四角形を見つけるつもりであると仮定します。
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(....);
}