Swing JComboBox et ActionEvent ?
Le
Vert-Galant

Bonjour.
J'ai une comboBox qui permet de choisir un mot dans une liste, récupérée
dans une table mysql.
problème : la méthode comboBox.getSelectedItem() renvoie deux mots pendant
l'ouverture du programme = un null et un mot vide. qui sont indésirables car
le null fait planter et le vide lance un tri pour rien (et faut attendre).
C'est facile d'exclure le null, mais pas le mot vide "", qui a un sens pour
la suite du programme si c'est voulu.
J'ai trouvé un truc qui marche :
.
private void maComboBoxActionPerformed(java.awt.event.ActionEvent evt) {
if (evt.getModifiers() == 16) {
monMot = (String) maComboBox.getSelectedItem();
//et on passe le mot à la méthode qui l'utilise
}
}
Bon ça marche, mais je ne comprend pas ce que représente les Event.modifiers
ni pourquoi la valeur 16 !laCategorie = (String)
cBoxCategories.getSelectedItem();
J'ai cherché mais n'ai trouvé que des réponses très sibyllines.
Si quelqu'un connait je suis preneur.
--
Yvon
débutant en java qui a commencé à coder il y a longtemps sur des cartes à
trous
http://perso.numericable.fr/vertgalant/
J'ai une comboBox qui permet de choisir un mot dans une liste, récupérée
dans une table mysql.
problème : la méthode comboBox.getSelectedItem() renvoie deux mots pendant
l'ouverture du programme = un null et un mot vide. qui sont indésirables car
le null fait planter et le vide lance un tri pour rien (et faut attendre).
C'est facile d'exclure le null, mais pas le mot vide "", qui a un sens pour
la suite du programme si c'est voulu.
J'ai trouvé un truc qui marche :
.
private void maComboBoxActionPerformed(java.awt.event.ActionEvent evt) {
if (evt.getModifiers() == 16) {
monMot = (String) maComboBox.getSelectedItem();
//et on passe le mot à la méthode qui l'utilise
}
}
Bon ça marche, mais je ne comprend pas ce que représente les Event.modifiers
ni pourquoi la valeur 16 !laCategorie = (String)
cBoxCategories.getSelectedItem();
J'ai cherché mais n'ai trouvé que des réponses très sibyllines.
Si quelqu'un connait je suis preneur.
--
Yvon
débutant en java qui a commencé à coder il y a longtemps sur des cartes à
trous
http://perso.numericable.fr/vertgalant/
Désolé un bout de ligne s'est accroché à mon texte.
Voilà le texte corrigé :
J'ai une comboBox qui permet de choisir un mot dans une liste, récupérée
dans une table mysql.
problème : la méthode comboBox.getSelectedItem() renvoie deux mots pendant
l'ouverture du programme = un null et un mot vide. qui sont indésirables
car
le null fait planter et le vide lance un tri pour rien (et faut attendre).
C'est facile d'exclure le null, mais pas le mot vide "", qui a un sens pour
la suite du programme si c'est voulu.
J'ai trouvé un truc qui marche :
....
private void maComboBoxActionPerformed(java.awt.event.ActionEvent evt) {
if (evt.getModifiers() == 16) {
monMot = (String) maComboBox.getSelectedItem();
//et on passe le mot à la méthode qui l'utilise
}
}
Bon ça marche, mais je ne comprend pas ce que représente les
Event.modifiers
ni pourquoi la valeur 16 !
J'ai cherché mais n'ai trouvé que des réponses très sibyllines.
Si quelqu'un connait je suis preneur.
--
Yvon
http://perso.numericable.fr/vertgalant/
[...]
C'est normal, il ne faut surtout pas faire comme ça. Si tu te demandes
pourquoi, sélectionne ton item avec le clavier, et vérifie si " ça
marche" toujours.
getModifiers() renvoie un masque qui accumule les constantes définies
dans la classe ActionEvent (ALT_MASK, etc). Note qu'aucun de ceux-là n 'a
la valeur 16. Ton code teste donc quelque chose d'autre, qui n'est pas
documenté.
Les détails (et la façon de faire correcte) sont dans
http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html
(et la doc correspondante de l'API).
-- Alain.
Exact ça ne marche pas au clavier.
J'ai modifié en ne filtrant que les nulls et en traitant ultérieurement le
cas du mot renvoyé vide.
private void maComboBoxActionPerformed(java.awt.event.ActionEvent evt) {
monMot = (String) maComboBox.getSelectedItem();
if (monMot != null) {
on passe le mot à la méthode qui l'utilise
}
}
ça marche à la souris et au clavier, mais avec un interface purement
graphique le clavier ne sert qu'à écrire, et le fonctionnement au clavier
est désagréable.
on peut visualiser le 'Modifier' de l'ActionEvent de 2 façons :
Avant modif, marche à la souris uniquement
- par println(evt), ça donne : 'button1'
- par println(evt.getModifiers()) , ça donne 16
Après modif, ça marche avec souris et clavier
- par println(evt), ça donne : ''
- par println(evt.getModifiers()) , ça donne 0
Le problème avec NetBeans IDE, c'est celui de tous les IDE : c'est vraiment
très pratique mais le fonctionnement intime des objets proposés est
difficile à cerner quand on en a besoin (pas souvent).
Quand et pourquoi un objet comme JcomboBox envoie t'il un ActionEvent ou un
ItemStateChanged ?
That is the question, mais on arrive à survivre sans le savoir.
--
Yvon
http://perso.numericable.fr/vertgalant/
[...]
Reste à savoir pourquoi tu reçois des null. Vérifie comment tu remplis
ton modèle.
Ca, ce n'est pas toi qui décide, c'est ton utilisateur. Sans parler des
questions d'accessibilité.
La doc de getModifiers() dit : "Returns the modifier keys held down
during this action event." Rien d'autre n'est garanti (et peut changer
d'une version à l'autre).
Je ne vois pas ce que NetBeans vient faire là -dedans...
Pas sûr. Mais si vraiment tu veux savoir, le mieux est de regarder la
documentation. Celle de JComboBox.addActionListener() dit :
"The ActionListener will receive an ActionEvent when a selection has
been made. If the combo box is editable, then an ActionEvent will be
fired when editing has stopped."
Idem pour addItemListener().
-- Alain.