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

时间:2016-07-20 23:12:16

标签: java user-interface javafx tableview

每当用户选择TableView上的项目时,我都需要一种方法来选择用户,即使该项目已被选中。

当用户从突出显示的项目中选择不同的项目时tableView.getSelectionModel().selectedItemProperty().addListener有效,但如果用户再次选择突出显示的项目,则它似乎无法正常工作。< / p>

如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

你可以这样做:

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

将其放入corntroller类中的构造函数或初始化方法...:)