JavaFXListView从两个列表中选择项目
使用一个ListView,可以从中选择多个项目,行为:JavaFXListView从两个列表中选择项目,java,javafx,java-8,javafx-8,user-input,Java,Javafx,Java 8,Javafx 8,User Input,使用一个ListView,可以从中选择多个项目,行为: listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 然后使用以下方法检索所选项目: selectedItems = listView.getSelectionModel().getSelectedItems(); 但是,我在一个窗口中有两个列表视图(listView和listView 2)。有没有办法在这两个列表中选择项目(通过用户按住Ctrl并
listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
然后使用以下方法检索所选项目:
selectedItems = listView.getSelectionModel().getSelectedItems();
但是,我在一个窗口中有两个列表视图(listView
和listView 2
)。有没有办法在这两个列表中选择项目(通过用户按住Ctrl
并选择项目)
编辑以澄清:
例如,我希望能够选择项目1、4、5和6,然后按Delete
。我可以按住Ctrl键,从列表1中选择4、5和6,然后从列表2中选择1。但是,如果我后来改变主意,实际上只想选择8,那么我释放Ctrl
并选择8,那么list2
中的所有内容都应该取消选择
您可以创建一个自定义实现,需要在两个列表之间共享该实现,并在其中实现选择约束
但是我怀疑你是否需要这样做,如果你有两个列表和两个选择模型,使用一些选择侦听器并查询这两个列表,我的印象是你已经拥有了你所需要的。我最终只是创建了一个侦听器,这将检查当用户更改他们从中选择项目的列表时,是否按住了
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
,这是默认行为。您将得到两个列表,而不是一个,但是将它们添加到一起应该不会有问题。