2 votes

La sélection de ComboBox n'est pas réinitialisée en haut de la liste déroulante (éléments) dans JavaFX 2.2

J'ai une ComboBox Source pour peupler les champs source (25 à 30 éléments) affichés ci-dessous dans la première page

"A"

"B"

...

"Z"

J'ai sélectionné le dernier élément de la ComboBox comme indiqué ci-dessous

"Z"

et en traversant vers la page suivante après avoir sauvegardé, j'ai besoin de rendre la sélection de la ComboBox source vide, donc j'ai renvoyé le code ci-dessous pour réinitialiser la ComboBox Source pour pointer vers le premier élément (pour réinitialiser l'affichage pour commencer en haut de la liste déroulante pour la sélection de l'utilisateur)

// ma première valeur dans la liste source est un espace vide - ""

                    sourceComboBox.setValue("");

même si vous utilisez des extraits de code ci-dessous comme

                    sourceComboBox.getSelectionModel().selectFirst(); 
                    sourceComboBox.getItems().clear();
                    sourceComboBox.getSelectionModel().clearAndSelect(0);

mais lorsque je clique pour ouvrir le menu déroulant de la combobox, il affiche toujours le menu déroulant en partant du bas comme indiqué ci-dessous

...

"X"

"Y"

"Z"

Je ne peux pas poster d'images pour représenter les valeurs de la combobox, donc j'ai mis des exemples ci-dessus.

Cela ressemble à un bug graphique pour moi ou est-ce que je fais quelque chose de mal? J'ai vu un problème similaire signalé dans la question ci-dessous mais aucune solution de contournement n'a été suggérée jusqu'à présent Problème de suppression de valeur de ComboBox

1voto

RonSiven Points 634

Si vous voulez simplement "réinitialiser" la liste déroulante, je pense que tout ce que vous avez à faire est de définir la valeur sur null, comme ceci :

sourceComboBox.setValue(null);

0voto

Brendan Points 3469

J'ai rencontré presque exactement la même situation et je suis tombé sur votre question en cherchant une solution. Heureusement, j'ai trouvé une solution de contournement qui force les ComboBox à se réinitialiser. Lorsque vous réinitialisez les données sur votre panneau, au lieu de faire quelque chose comme :

sourceComboBox.getSelectionModel().clearSelection();
sourceComboBox.getItems.clear();

faites quelque chose comme cela...

parentNode.getChildren().remove(sourceComboBox);
sourceComboBox= new ComboBox();  // faites ce que vous devez pour formater votre ComboBox
parentNode.add(sourceComboBox);

Vous devrez également refaire un setItems() sur votre ComboBox pour que le nouveau soit rempli. Ce n'est pas une solution idéale mais cela semble fonctionner comme je m'attendrais à ce que la méthode clearSelection() fournie le fasse.

0voto

user3765097 Points 1

Voici le code que vous recherchez. Il le réinitialisera à l'index que vous donnez entre parenthèses.

sourceComboBox.setSelectedIndex(0);

Bonne chance

0voto

RashDiamond Points 13

La plupart des choses me donnaient une erreur quand je les essayais. Ce qui a le mieux fonctionné pour moi a été d'utiliser ceci

comboBox.getSelectionModel().clearSelection();

Cela va essentiellement définir la valeur de votre ComboBox sur null. Par conséquent, si vous faites référence à la valeur du ComboBox à un autre endroit, il est important de vérifier si la valeur du ComboBox est nulle en utilisant ceci

if(comboBox.getValue() != null)
  //Segment de code ici

-1voto

Uluk Biy Points 15426

Le contrôle ComboBox n'a pas de méthode comme scrollTo(index) de la ListView. Il semble donc difficile de contourner ce comportement. Vous pouvez soumettre une demande de fonctionnalité sur JavaFX Jira.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X