JavaFXを使用すると、セルごとに複数のリスナーを設定できます(これが良いか悪いかを言っているのではなく、できることだけです)。特定の列/行の特定のリスナーへの応答を実行するようにコードが設定されている場合、各リスナーはコードを実行します。セルのマウスクリックをキャプチャするには、次を使用します。
table.setEditable(true);
table.getSelectionModel().setCellSelectionEnabled(true); // selects cell only, not the whole row
table.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent click) {
if (click.getClickCount() == 2) {
@SuppressWarnings("rawtypes")
TablePosition pos = table.getSelectionModel().getSelectedCells().get(0);
int row = pos.getRow();
int col = pos.getColumn();
@SuppressWarnings("rawtypes")
TableColumn column = pos.getTableColumn();
String val = column.getCellData(row).toString(); System.out.println("Selected Value, " + val + ", Column: " + col + ", Row: " + row);
if ( col == 2 ) { ... do something ... }
if ( col == 5 ) { ... do something ... }
if ( col == 6 ) { ... do something ... }
if ( col == 8 ) { ... do something ... }
}
}
});
上記のコードから、マウスクリックに基づいて何かを実行したい列に次のコードがあります。
if ( col == <int> ) { ... do something ... }
また、これらの列を編集できないように設定しています。
thisCol.setEditable(false);
編集したい行.setEditable(true)
がありますが、マウスクリックに含まれる応答がありません。
セル編集のデフォルトは2回のマウスクリックです。上記のコードを変更して、セル上のさまざまなマウスイベントをキャプチャできるため、マウスを2回クリックするだけでセルを編集したり、自分で決定した他のマウスイベントでURLやダイアログボックスなどを開いたりできます。TableViewを使用すると、想像力とプログラミングスキルに基づいて独自の機能を決定できます。あなたは「私はそれを編集するか、それを使ってマウスイベントを発生させることができる」ということに固執していません。あなたは両方を行うことができます:)