我创建了一个带有一堆字符串的ListView,它有多种选择模式,最后我添加了一个Listener到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!");
}
}
});
选择项目时,所有内容都打印好了,但是一旦我开始使用Ctrl取消选择项目。此处未打印任何内容,因为更改的事件可能未被触发。
任何人都知道这是不是一个错误?或者我在这里做错了什么?
最后我只需要知道选择是否以某种方式改变(无论是选择还是取消选择项目),所以我可以启动另一个过程。
EDIT --- 使用Ctrl取消选择时,“选择已更改!”仅在取消选择所选项目的最后一项时打印。
答案 0 :(得分:4)
将此侦听器注册到listview:
listView.getSelectionModel().getSelectedItems()
.addListener(new ListChangeListener<String>()
{
@Override
public void onChanged(Change<? extends String> arg0)
{
System.out.println("Selection Changed!");
}
});
答案 1 :(得分:1)
与上述答案相同,但添加一行来捕捉指数。
listView.getSelectionModel().getSelectedItems()
.addListener(new ListChangeListener<String>()
{
@Override
public void onChanged(Change<? extends String> arg0)
{
System.out.println("Selection Changed!");
ObservableList<Integer> sel = listView.getSelectionModel().getSelectedIndices();
}
});