JavaFX ListView从两个列表中选择项目

时间:2018-04-19 05:34:10

标签: java javafx java-8 javafx-8 user-input

使用一个ListView,可以从中选择多个项目:

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

然后检索选择的项目:

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

但是,我在一个窗口中有两个ListView(listViewlistView2)。有没有办法在这两个列表中选择项目(由用户按住Ctrl并选择项目)?

修改以澄清: 例如,我希望能够选择项目1,4,5和6,然后按Delete。我可以按住Ctrl并从list1中选择4,5和6,然后从list2中选择1。但是,如果我改变主意,实际上只想选择8,那么我发布Ctrl并选择8,那么list2中的所有内容都应取消选择

Screenshot of two populated lists and a button

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

我最后只是创建了一个侦听器,当用户更改了从中选择项目的列表时,它会检查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