【问题标题】:How to detect a selection on JavaFX TableView when clicking a highlighted item?单击突出显示的项目时如何检测JavaFX TableView上的选择?
【发布时间】:2016-11-24 08:15:47
【问题描述】:
每次用户在 TableView 上选择一个项目时,我都需要一种方法来获取用户选择,即使该项目已经被选中。
tableView.getSelectionModel().selectedItemProperty().addListener 在用户从突出显示的项目中选择不同 项时起作用,但如果用户再次选择突出显示的项目,它似乎不起作用。
如何解决这个问题?
【问题讨论】:
标签:
java
user-interface
javafx
tableview
【解决方案1】:
你可以这样做:
tableView.setOnMouseClicked((MouseEvent event) -> {
if(event.getButton().equals(MouseButton.PRIMARY)){
System.out.println(tableView.getSelectionModel().getSelectedItem());
}
});
如果您使用可编辑的表格单元格再次选择突出显示的项目,上述代码将不起作用
【解决方案2】:
如果您只对行上的点击感兴趣,请使用自定义rowFactory:
TableView<Item> table = ...
EventHandler<MouseEvent> clickListener = evt -> {
TableRow<Item> row = (TableRow<Item>) evt.getTarget();
if (!row.isEmpty()) {
// do something for non-empty rows
System.out.println("you clicked " + row.getItem());
}
};
table.setRowFactory(tv -> {
TableRow<Item> row = new TableRow<>();
// add click listener to row
row.setOnMouseClicked(clickListener);
return row;
});
【解决方案3】:
我所知道的最简单的方法:
yourTableView.setOnMousePressed(e ->{
if (e.getClickCount() == 2 && e.isPrimaryButtonDown() ){
int index = yourTableView.getSelectionModel().getSelectedIndex();
System.out.println("" + index);
}
});
将它放入您的corntroller类中的构造函数或初始化方法... :)