使用一个ListView,可以从中选择多个项目:
listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
然后检索选择的项目:
selectedItems = listView.getSelectionModel().getSelectedItems();
但是,我在一个窗口中有两个ListView(listView
和listView2
)。有没有办法在这两个列表中选择项目(由用户按住Ctrl
并选择项目)?
修改以澄清:
例如,我希望能够选择项目1,4,5和6,然后按Delete
。我可以按住Ctrl
并从list1
中选择4,5和6,然后从list2
中选择1。但是,如果我改变主意,实际上只想选择8,那么我发布Ctrl
并选择8,那么list2
中的所有内容都应取消选择。
答案 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
。