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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
jocelyn
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 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
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) {
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 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
jocelyn wrote:
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
jocelyn <elurin@free.fr> wrote:
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
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
jocelyn wrote:
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
jocelyn <elurin@free.fr> wrote:
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
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