OVH Cloud OVH Cloud

[swing-jRadioButton] deux boutons selected dans un group ???

2 réponses
Avatar
pere.noel
j'ai besoin de sélectionner un JRadioButton d'un ButtonGroup par
programme, aussi je fais :

<code>
for (Enumeration en = fillChooserGroup.getElements(); en
.hasMoreElements();) {
JRadioButton fcg = (JRadioButton) en.nextElement();
if (fcg.getName().equals(name)) {
fcg.setSelected(true);
}
</code>

et donc, quelque fois (sur un group) j'ai deux boutons sélectionnés :
celui "à la main" et l'autre par prog, d'autres fois (sur un autre
group) pas de pb, je n'ai bien qu'un seul bouton sélectionné ???

je précise que si je fais un repaint() sur chaque bouton, ça ne change
rien et que si je mes les autres à false, ça ne change rien non plus.

je dois faire une erreur qqpart, mais où ?

au cas où qq'un aurait une piste...

N.B. bien sûr j'ai vérifié par System.out que je settais le bon...
tous les names attendus défilent...
--
une bévue

2 réponses

Avatar
Syrion
Une bévue wrote:

j'ai besoin de sélectionner un JRadioButton d'un ButtonGroup par
programme, aussi je fais :

<code>
for (Enumeration en = fillChooserGroup.getElements(); en
.hasMoreElements();) {
JRadioButton fcg = (JRadioButton) en.nextElement();
if (fcg.getName().equals(name)) {
fcg.setSelected(true);
}
</code>

et donc, quelque fois (sur un group) j'ai deux boutons sélectionnés :
celui "à la main" et l'autre par prog, d'autres fois (sur un autre
group) pas de pb, je n'ai bien qu'un seul bouton sélectionné ???

je précise que si je fais un repaint() sur chaque bouton, ça ne change
rien et que si je mes les autres à false, ça ne change rien non plus.

je dois faire une erreur qqpart, mais où ?

au cas où qq'un aurait une piste...

N.B. bien sûr j'ai vérifié par System.out que je settais le bon...
tous les names attendus défilent...


Il ne faut pas accéder aux boutons directement, mais par le button group.
1/C'est l'action command et nom le "nom" du bouton qui l'identifie dans
le programme. Il faut parcourir ta liste de bouton qui sont dans le
ButtonGroup, et pour chaque JRadioButton tu fait un getActionCommand().
évidemment, il faut avoir fait un setActionCommand(String) à la création
des boutons. Rien ne t'empêche de choisir le lable ou le nom comme
valeur, mais en général ou fait court.
2/ tu as trouvé ton JRadioButton avec l'algo que tu utilise déjà, sauf
que tu utilise getActionCommand et non getName de préférence. Tu veux le
sélectionner mais en respectant la cohérence du ButtonGroup ? fait un
getModel(), ça te renvoie une instance de ButtonModel, le modèle de
données de ton bouton
3/ appelle setSelected(ButtonModel,boolean) sur ton ButtonGroup (en
mettant le booléen à true. Là, le groupe sait que tu veux sélectionner
tel bouton, et se charge d'en déselectionner un autre.

Non testé mais devrait marcher à mon sens. Je le teste demain et si ça
marche pas je reviendrai me pendre publiquement.

Avatar
pere.noel
Syrion wrote:

1/C'est l'action command et nom le "nom" du bouton qui l'identifie dans
le programme. Il faut parcourir ta liste de bouton qui sont dans le
ButtonGroup, et pour chaque JRadioButton tu fait un getActionCommand().
évidemment, il faut avoir fait un setActionCommand(String) à la création
des boutons. Rien ne t'empêche de choisir le lable ou le nom comme
valeur, mais en général ou fait court.
en fait j'ai mis la même string pour mes actions commands que pour mes

names.
2/ tu as trouvé ton JRadioButton avec l'algo que tu utilise déjà, sauf
que tu utilise getActionCommand et non getName de préférence. Tu veux le
sélectionner mais en respectant la cohérence du ButtonGroup ? fait un
getModel(), ça te renvoie une instance de ButtonModel, le modèle de
données de ton bouton
3/ appelle setSelected(ButtonModel,boolean) sur ton ButtonGroup (en
mettant le booléen à true. Là, le groupe sait que tu veux sélectionner
tel bouton, et se charge d'en déselectionner un autre.
j'avoue avoir été intéressé par ButtonModel mais ne voit pas très bien

ce que ça représente (je suis habituer aux Models pour les JTable et
JXTreeTable). je vais regarder de + près cette solution.


autre question sur les jRadioButton, je veux pouvoir setter la couleur
et la police du texte associé, je me suis rendu compte hier que soit on
ne peut le faire quand le bouton n'est pas enablé soit il y a une
couleur une police associés différent suivant l'état du bouton,
d'ailleurs un bouton sélectionné a son texte qui devient plus gras.

c'est documenter o`ça ?
pas dans JRadioButton, il faut aller voir du côté d'AbstractButton ?


--
une bévue