JComboBox paramètre étiquette et valeur
Est-il possible de définir une valeur et d'une étiquette sur un JComboBox
afin que je puisse afficher une étiquette, mais à obtenir une valeur qui est différente?
Par exemple en JavaScript je peux le faire:
document.getElementById("myselect").options[0].value //accesses value attribute of 1st option
document.getElementById("myselect").options[0].text //accesses text of 1st option
source d'informationauteur xdevel2000
Vous devez vous connecter pour publier un commentaire.
Vous pouvez mettre n'importe quel objet à l'intérieur d'un JComboBox. Par défaut, il utilise la méthode toString de l'objet pour afficher une étiquette de naviguer dans la liste déroulante à l'aide du clavier. Donc, le meilleur moyen est sans doute de définir et d'utiliser des objets appropriés à l'intérieur de la zone de liste modifiable :
Voici un utilitaire d'interface et la classe qui font qu'il est facile d'obtenir une zone de liste modifiable à l'utilisation de différentes étiquettes. Au lieu de créer un remplacement
ListCellRenderer
(et risquer la recherche de lieu, si le look-and-feel est changé), il utilise la valeur par défautListCellRenderer
(quoi que peut-être), mais d'origine dans votre propre chaînes de caractères que le texte de l'étiquette à la place de ceux définis partoString()
dans vos objets de valeur.Comme vous pouvez le voir le
ToStringListCellRenderer
obtient une chaîne personnalisée à partir de laToString
mise en œuvre, et passe ensuite à l'originalListCellRenderer
au lieu de passer dans la valeur de l'objet lui-même.Pour utiliser ce code, faire quelque chose comme ce qui suit:
Ainsi que de l'utiliser pour faire des étiquettes personnalisées, si vous faites une
ToString
de mise en œuvre qui crée des chaînes en fonction de la langue du système, vous pouvez facilement internationaliser la zone de liste modifiable sans avoir à changer quoi que ce soit dans vos objets de valeur.Instances de
Enum
sont particulièrement pratiques pour les ce, en tant quetoString()
"renvoie le nom de cette constante enum, figurant dans la déclaration."Utilisation ListCellRenderer à réaliser ce que vous voulez. Faire une classe qui étend la classe
JLabel
et met en œuvreListCellRenderer
. Jeu de classe comme un moteur de rendu dans votreJComboBox
à l'aide desetRenderer()
méthode. Maintenant, quand vous les valeurs de l'accès à partir de votre jcombobox il sera de type jlabel.