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 允许您根据自己的想象力和编程技能来确定自己的功能。你不会被“我可以编辑它,或者用它触发鼠标事件”所困。你可以两者都做:)