Używam kontrolki ListView w aplikacji JavaFX. Jest ustawiony na tryb wyboru WIELU. Wiem, że jako użytkownik mogę Ctrl-kliknąć element, aby go odznaczyć, ale to nie jest wystarczająco intuicyjne dla moich użytkowników. Chcę drugi raz kliknąć, aby odznaczyć. Innymi słowy kliknij raz - wybierz; kliknij wybrany element, a zostanie on odznaczony.Odznacz element w javafx ListView na kliknij
Próbowałem używać zarówno zdarzenia ChangeListener, jak i onMouseClicked. Żaden z nich nie działa bardzo dobrze. Poniżej znajdują się fragmenty kodu każdego z nich.
ChangeListener:
efekt - pierwsza pozycja na liście jest NIGDY wybrany. Klikam na niego i pozostaje on niesklasyfikowany. Brak wpływu na przedmioty 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:
żadnego efektu, ponieważ nie jestem pewien, jak zdobyć indeks jednej prostu kliknął. Będąc na sztywno, to po prostu uniemożliwia kiedykolwiek wybierając z punktem 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);
}
}
});
Jak użytkownikom wybrać wiele przedmiotów? –
W tej chwili nie wiedzą, że mogą z wciśniętym klawiszem Ctrl, co stanowi problem. Chciałbym, aby mogli wybrać i odznaczyć za pomocą jednego kliknięcia (bez klawisza Ctrl). –
Korzystanie z "Ctrl + kliknięcie" jest powszechnym doświadczeniem użytkownika w wielu aplikacjach Web/Desktop GUI. Możesz uprzejmie przedstawić to swoim użytkownikom. Alternatywnie możesz umieścić pola wyboru w komórkach listy, co może być bardziej intuicyjne. –