代码之家  ›  专栏  ›  技术社区  ›  Ollie Brian

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

  •  1
  • Ollie Brian  · 技术社区  · 8 年前

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

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

    然后检索所选项目:

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

    但是,我有两个列表视图( listView listView2 )在一个窗口中。有没有办法在这两个列表中选择项目(通过用户按住 Ctrl 和选择项目)?

    编辑以澄清 : 例如,我希望能够选择项目1、4、5和6,然后按 Delete .我能忍住 Ctrl键 并从中选择4、5和6 list1 ,然后从中选择1 list2 .然而,如果我改变主意,实际上只想选择8,那么 I发布 Ctrl键 选择8,然后选择 列表2 应取消选择

    Screenshot of two populated lists and a button

    2 回复  |  直到 8 年前
        1
  •  2
  •   M. le Rutte    8 年前

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

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

        2
  •  0
  •   Ollie Brian    8 年前

    我最终只是创建了一个监听器,这将检查 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