problème d'update de jComboBox

Le
yvon.thoravalNO-SPAM
j'ai un problème d'update de jComboBox et je tourne en rond depuis un
moment

j'ai une jComboBox qui permet de changer le "language", ça ca marche
MAIS comme je change le "language" j'aimerais aussi que les items
changent accordingly

mais ça boucle :))

disons qu'au départ j'ai ça :

index item
0 Allemand
1 Anglais
2 Français
3 Italien

avec getSelectedIndex() = 2
je choisi "Italien" (getSelectedIndex() = 3), le "laguage" bascule bien
sur "Italien" MAIS, dans la foulée, je cherche à faire un update de la
jComboBox de telle manière que j'aie :

index item
0 Tedesco
1 Inglese
2 Francese
3 Italiano

aussi je fais un removeAllItems() suivi de
insertItemAt(prefsMiscCombosItems.get(i).get(j), j)

et j'essaie de remettre l'index sélectionné à la valeur précédente :
setSelectedIndex(idx); (le idx vient d'un getsetSelectedIndex();
précédent la màj.

déjà là ca ne va pas parcque je me retrouve avec un index à -1

idx = combo.getSelectedIndex();// donne 2
je fais l'update (qui marche)
combo.setSelectedIndex(idx);
je relis immédiatement après :
idx = combo.getSelectedIndex();// donne -1

j'ai essayé de "ruser" en faisant :

idx = combo.getSelectedIndex();// donne 2
combo..setEnabled(false);//j'interdis une sélection pendant l'update
je fais l'update (qui marche)
combo..setEnabled(true);//j'autorise une sélection après l'update
combo.setSelectedIndex(idx);
je relis immédiatement après :
idx = combo.getSelectedIndex();// donne -1

donc même résultat.

--
yt
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
jocelyn
Le #651909
Salut,

Je pense que ton pb vient du fait que tu passes tjrs par la vue pour jouer
sur les données de ta combo, ce qui balance des événements
dans tous les sens. Quand tu veux agir de manière globale, il vaut mieux
aller directement fouiner dans le modèle.

Je joins le code qui donne un debut de piste. Attention ! Je sais que ce
code est tres mal fait,
pas beau et meme vilain :) Il s'agit juste de donner une piste sur la
maniere de faire. D'autre part les
connaisseurs verront que j'utilise JBuilder...

public class TestFrame extends JFrame {
private JPanel contentPane;
private BorderLayout borderLayout1 = new BorderLayout();
private JComboBox combo = new JComboBox();

public TestFrame() {
try {
jbInit();
}
catch(Exception ex) {

}
}

private void jbInit() throws Exception {
String[] data = new String[4];
data[0] = "Anglais";
data[1] = "Allemand";
data[2] = "Francais";
data[3] = "Italien";

combo.setModel(new DefaultComboBoxModel(data));
combo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
combo_actionPerformed(e);
}
});
contentPane = (JPanel)this.getContentPane();
contentPane.setLayout(borderLayout1);
this.setSize(new Dimension(246, 39));
this.setTitle("Projet de test");
contentPane.add(combo, BorderLayout.CENTER);
}

private void combo_actionPerformed(ActionEvent e) {
String s = (String)combo.getSelectedItem();
int idx = combo.getSelectedIndex();
if (s.equals("Italien")) {
String[] data = new String[4];
data[0] = "Inglese";
data[1] = "Tedesco";
data[2] = "Francese";
data[3] = "Italiano";
combo.setModel(new DefaultComboBoxModel(data));
combo.setSelectedIndex(idx);
}
}
}

--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne
pas devenir un monstre lui-même
yvon.thoravalNO-SPAM
Le #651647
jocelyn
Je pense que ton pb vient du fait que tu passes tjrs par la vue pour jouer
sur les données de ta combo, ce qui balance des événements
dans tous les sens. Quand tu veux agir de manière globale, il vaut mieux
aller directement fouiner dans le modèle.

Je joins le code qui donne un debut de piste.


Oui, merci beaucoup, finalement je dois traiter mes JComboBox comme des
JTable... agir sur le modèle, c'est ça la clé :))

Je vais essayer demain matin ton code, il me faut l'adapter because mes
String[] proviennent d'un fichier *.properties...
--
yt

yvon.thoravalNO-SPAM
Le #654329
jocelyn
il vaut mieux
aller directement fouiner dans le modèle.


merci encore j'ai implémenté suivant tes conseils, ça va beaucoup mieux
et le code est nettement plus simple :))

avant j'arrivait même à avoir un "bus error" après avoir bouclé une
soixantaine de fois...

maintenant je n'en plus que 4, à chque fois, mais là cela vient
peut-être de la souris, des rebonds que sais-je, en tout cas c'est
stable càd que ca ne change pas le langage, transitoirement, pendant le
changement de langage...

Le Model n'a pas suffit, pour calmer le jeu il a fallu que j'implémente
l'actionListener...
--
yt

Publicité
Poster une réponse
Anonyme