两个列表中的 JavaFX ListView select 个项目

JavaFX ListView select items from two lists

使用一个 ListView,可以从中 select 多个项目,使用以下行:

listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

然后检索 select 编辑的项目:

selectedItems =  listView.getSelectionModel().getSelectedItems();

但是,我在一个 window 中有两个 ListView(listViewlistView2)。有什么方法可以在这两个列表中 select 项目(通过用户按住 Ctrl 和 selecting 项目)?

编辑澄清: 例如,我希望能够 select 项目 1、4、5 和 6,然后按 Delete。我可以从 list1 按住 Ctrl 和 select 4、5 和 6,然后从 list2 按住 select 1。但是,如果我后来改变主意,实际上只想 select 8,所以 我释放 Ctrl 和 select 8,那么 list2 中的所有内容应该 deselected.

您可以创建 SelectionModel 的自定义实现,您需要在两个列表之间共享它并在其中实现选择约束。

但是我怀疑你需要这个,如果你有两个列表和两个选择模型,使用一些选择侦听器并查询两个列表我的印象是你已经有了你需要的东西。

我最后只是创建了一个侦听器,它会检查当用户更改他们从中选择项目的列表时 Ctrl 是否被按住:

boolean controlIsDepressed = false;

list1.getSelectionModel().selectedItemProperty().addListener(
    (observable) -> {
                Scene scene = list1.getScene();
                scene.setOnKeyPressed(e -> {
                    if (e.getCode() == KeyCode.CONTROL) {
                        controlIsDepressed = true;
                    }
                });
                scene.setOnKeyReleased(e -> {
                    if (e.getCode() == KeyCode.CONTROL) {
                        controlIsDepressed = false;
                    }
                });
                // Clear the other list if Ctrl is not being held down
                if (!controlIsDepressed) list2.getSelectionModel().clearSelection();
            });

然后 list2 类似。