我在JavaFX应用程序中使用ListView控件。它被设置为MULTIPLE选择模式。我知道作为一个用户,我可以通过Ctrl-点击一个项目来取消选择它,但这对我的用户来说不够直观。我想要一种方法来再次单击以取消选择它。换句话说,请点击一次 - 选择;点击选择的项目,它变成未选中。取消选择一个javafx ListView上的项目点击
我试过使用ChangeListener和onMouseClicked事件。两者都不太好。以下是每个代码片段。
的ChangeListener:
效果 - 在列表中的第一个项目是永远不会选择。我点击它,它保持不变。第2..N
listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<SpecificAlgorithmData>() {
@Override
public void changed(final ObservableValue observableValue, final SpecificAlgorithmData oldData, final SpecificAlgorithmData newData) {
//if already selected then deselect it
int selectedIndex = listView.getSelectionModel().getSelectedIndex();
System.out.println("selected " + selectedIndex);
System.out.println("all selected" + listView.getSelectionModel().getSelectedIndices());
if (!selecting && !listView.getSelectionModel().getSelectedIndices().contains(selectedIndex)){
Iterator <Integer> iterator = listView.getSelectionModel().getSelectedIndices().iterator();
selecting = true;
listView.getSelectionModel().select(-1);//deselect all
while (iterator.hasNext()){
int index = iterator.next();
if (index!= selectedIndex){
listView.getSelectionModel().select(index);
}
}
selecting = false;
}
}
}
的onClick对项目没有影响:
没有影响,因为我不知道如何让我点击了一个索引。作为硬编码,这根本不允许有史以来选择第2项
listView.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(final MouseEvent mouseEvent) {
int selectedItem = 2; //FIXME: How to I get the index of clicked item?
if (listView.getSelectionModel().isSelected(selectedItem)){
listView.getSelectionModel().clearSelection(selectedItem);
}
}
});
如何在用户选择多个项目? –
现在他们不知道他们可以用Ctrl键点击这是问题所在。我希望他们能够通过点击(无Ctrl键)来选择和取消选择。 –
使用“Ctrl + Click”是许多GUI Web /桌面应用程序的常见用户体验。您可以将其介绍给您的用户。或者,您可以将复选框放在列表单元格中,这可能更直观。 –