如何在单击突出显示的项目时检测JavaFX TableView上的选择



每次用户在TableView上选择项目时,我都需要一种方法来获得用户选择,即使该项目已经被选择。

当用户选择与高亮显示的不同的项目时,tableView.getSelectionModel().selectedItemProperty().addListener起作用,但如果用户再次选择高亮显示的项目,它似乎不起作用。

这将如何解决?

您可以这样做:

tableView.setOnMouseClicked((MouseEvent event) -> {
        if(event.getButton().equals(MouseButton.PRIMARY)){
            System.out.println(tableView.getSelectionModel().getSelectedItem());
        }
    });

如果您使用可编辑的表格单元格

再次选择突出显示的项目,则上面的代码不起作用

如果您只对行上的点击感兴趣,请使用自定义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;
});

我所知道的最简单的方法:

 yourTableView.setOnMousePressed(e ->{
                if (e.getClickCount() == 2 && e.isPrimaryButtonDown() ){
                    int index = yourTableView.getSelectionModel().getSelectedIndex();
                    System.out.println("" + index);
                }
            });

将其放入corntroller类中的构造函数或initialize方法中…:)

相关内容

  • 没有找到相关文章