ListView 不会在 selectedItemProperty 上触发更改的事件

JDD*_*ado 1 listview javafx-2

我用一堆字符串创建了一个 ListView,它具有多选模式,最后我向 selectedItemProperty() 添加了一个监听器,如下所示:

  ObservableList<String> myStringsObsList = FXCollections.observableArrayList(strings);
  ListView<String> listView = new ListView<String>(myStringsObsList);
  listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

  listView.getSelectionModel().selectedItemProperty().addListener(
    new ChangeListener<String>() {
        public void changed(ObservableValue<? extends String> ov, String old_val, String new_val) 
       {
         System.out.println("Selection Changed!");
       }
     }
  });
Run Code Online (Sandbox Code Playgroud)

选择项目时,一切都打印正常,但是一旦我开始使用 Ctrl 取消选择项目。此处没有打印任何内容,因为可能不会触发已更改的事件。

有谁知道这是否是一个错误?或者我在这里做错了什么?

最后,我只需要知道选择是否以某种方式发生了变化(无论是选择还是取消选择项目),这样我就可以启动另一个进程。

编辑 --- 使用 Ctrl 取消选择时,“选择已更改!” 仅当取消选择所选项目的最后一个项目时才打印。

Asp*_*ant 5

将此侦听器注册到列表视图:

listView.getSelectionModel().getSelectedItems()
        .addListener(new ListChangeListener<String>()
        {

            @Override
            public void onChanged(Change<? extends String> arg0)
            {
                System.out.println("Selection Changed!");

            }

        });
Run Code Online (Sandbox Code Playgroud)