Désélectionner un élément sur un javafx ListView sur cliquez sur

Je suis en utilisant un contrôle ListView dans un JavaFX application. Il est réglé pour le mode à sélection MULTIPLE. Je sais en tant qu'utilisateur, je peux Ctrl-Cliquez sur un élément pour le désélectionner, mais ce n'est pas assez intuitif pour mes utilisateurs. Je veux un moyen de cliquez une deuxième fois pour le désélectionner. En d'autres termes, cliquez une fois sélectionner, cliquez sur l'élément sélectionné et il devient non sélectionnés.

J'ai essayé d'utiliser à la fois un ChangeListener et un onMouseClicked événement. Ni fonctionne très bien. Ci-dessous sont extraits de code de chacun.

ChangeListener:

effet - premier élément de la liste n'est JAMAIS sélectionné. Je clique dessus et il reste unclicked. Aucun effet sur les points 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:

Aucun effet, car je ne suis pas sûr de savoir comment obtenir l'index de celui que j'ai juste cliqué. Étant codé en dur, ce tout simplement interdit de jamais la sélection de l'élément 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);
        }
    }
});
Comment les utilisateurs de sélectionner plusieurs éléments?
Pour l'heure, ils ne savent pas qu'ils peuvent avec Ctrl-clic qui est le problème. Je voudrais qu'ils soient en mesure de sélectionner et de désélectionner d'un simple clic (pas de touche Ctrl).
Utilisation de la touche "Ctrl + Clic" est une commune expérience de l'utilisateur sur l'interface graphique Web/applications de Bureau. Vous pouvez bien vouloir présenter ce à vos utilisateurs. Sinon, vous pouvez mettre des cases à cocher sur la liste des cellules, ce qui pourrait être plus intuitive.
Des cases à cocher sur la liste des boîtes, génie. Pourquoi n'ai-je pas pensé!!!

OriginalL'auteur Domenic D. | 2014-05-13