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

单击突出显示的项目时,如何检测JavaFX TableView上的选择?,java,user-interface,javafx,tableview,Java,User Interface,Javafx,Tableview,我需要一种方法,在用户每次选择TableView上的项目时获取用户选择,即使该项目已被选中 当用户从高亮显示的项目中选择不同的项目时,tableView.getSelectionModel().selectedItemProperty().addListener会起作用,但如果用户再次选择高亮显示的项目,则它似乎不起作用 如何修复此问题?您可以执行以下操作: tableView.setOnMouseClicked((MouseEvent event) -> { if(eve

我需要一种方法,在用户每次选择TableView上的项目时获取用户选择,即使该项目已被选中

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

如何修复此问题?

您可以执行以下操作:

tableView.setOnMouseClicked((MouseEvent event) -> {
        if(event.getButton().equals(MouseButton.PRIMARY)){
            System.out.println(tableView.getSelectionModel().getSelectedItem());
        }
    });
如果使用可编辑表格单元格再次选择突出显示的项目,则上述代码不起作用。您可以执行以下操作:

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

如果使用可编辑表格单元格再次选择突出显示的项目,则上述代码不起作用

如果只对行上的单击感兴趣,请使用自定义的
行工厂

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;
});
TableView表=。。。
EventHandler clickListener=evt->{
TableRow row=(TableRow)evt.getTarget();
如果(!row.isEmpty()){
//对非空行执行某些操作
System.out.println(“您单击了”+row.getItem());
}
};
表.setRowFactory(电视->{
TableRow行=新TableRow();
//将单击侦听器添加到行
row.setOnMouseClicked(clickListener);
返回行;
});

如果您只对行上的单击感兴趣,请使用自定义的
行工厂

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;
});
TableView表=。。。
EventHandler clickListener=evt->{
TableRow row=(TableRow)evt.getTarget();
如果(!row.isEmpty()){
//对非空行执行某些操作
System.out.println(“您单击了”+row.getItem());
}
};
表.setRowFactory(电视->{
TableRow行=新TableRow();
//将单击侦听器添加到行
row.setOnMouseClicked(clickListener);
返回行;
});

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

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

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

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

 yourTableView.setOnMousePressed(e ->{
                if (e.getClickCount() == 2 && e.isPrimaryButtonDown() ){
                    int index = yourTableView.getSelectionModel().getSelectedIndex();
                    System.out.println("" + index);
                }
            });
将其放入corntroller类中的构造函数或初始化方法…:)