Problem Listener JComboBox

Bonjour,
Je veux créer une interface swing qui contient deux combobox combo1 et combo2
Combo1 : contient un événement even1 qui s’exécute après chaque changement de l’élément sélectionne.
Combo2 : contient un événement even2 qui change l’élément affiche de combo1 sans exécute l’even1.
Donc j’ai pensé d’ajouter :
1- Un MouseListener à combo1 qui contient even1 mais le problème que l’événement ne s’exécute pas qu’après un autre clic sur l’élément choisi (c.-à-d. le faite de choisir un élément avec le sourie n’entraine pas que even1 sera exécuter).
2- Un ActionListener à combo1 qui contient even1 mais le problème que l’événement even1 s’exécute aussi après changement provienne de l’even2 de combo2.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
class EssaiChoix extends JPanel implements ItemListener {
	JComboBox combo1 = new JComboBox();
	JComboBox combo2 = new JComboBox();
	Ardoise ardoise = new Ardoise();
 
	EssaiChoix() {
		JPanel panneau = new JPanel();
		combo1.addItem("noir");
		combo1.addItem("rouge");
		combo1.addItem("vert");
		combo1.addItem("bleu");
		combo1.addItem("jaune");
		combo1.setToolTipText("combo1");
		combo2.addItem("1");
		combo2.addItem("2");
		combo2.addItem("3");
		combo2.addItem("4");
		combo2.addItem("5");
		combo2.setToolTipText("combo2");
		panneau.add(combo1);
		panneau.add(combo2);
		combo1.addMouseListener(new MouseAdapter() {
			public void mouseReleased(MouseEvent e) {
				ardoise.setForeground(getCouleur((String) combo1
						.getSelectedItem()));
			}
		});
		combo2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				combo1.setSelectedIndex(combo2.getSelectedIndex());
			}
		});
		setLayout(new BorderLayout(5, 5));
		add(panneau, BorderLayout.NORTH);
		add(panneau, BorderLayout.EAST);
		add(ardoise, BorderLayout.CENTER);
	}
 
	public void itemStateChanged(ItemEvent evt) {
		ardoise.setForeground(getCouleur((String) combo1.getSelectedItem()));
	}
 
	Color getCouleur(String s) {
		if (s.equals("noir"))
			return Color.black;
		else if (s.equals("rouge"))
			return Color.red;
		else if (s.equals("vert"))
			return Color.green;
		else if (s.equals("bleu"))
			return Color.blue;
		else if (s.equals("jaune"))
			return Color.yellow;
		return Color.black;
	}
 
	public static void main(String[] argv) {
		JFrame monCadre = new JFrame();
		monCadre.setContentPane(new EssaiChoix());
		monCadre.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		monCadre.pack();
		monCadre.setVisible(true);
	}
}
 
class Ardoise extends JPanel {
	Ardoise() {
		setPreferredSize(new Dimension(100, 100));
	}
 
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.drawOval(10, 10, 80, 80);
	}
}


Merci d'avance.
Cordialement
Configuration: Windows XP
Firefox 3.5.3

2 réponses

  1. Bonjour,

    tu veux juste afficher le nom de la couleur dans comb1 lorsque tu cliques sur ton choix dans comb2, et sans appliquer la couleur sur l'objet Ardoise. :(

    benh, voici se bout de code, tu peux l'essayer et compare ton travail avec le mien

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
    class EssaiChoix extends JPanel implements ItemListener {
    	JComboBox combo1 = new JComboBox();
    	JComboBox combo2 = new JComboBox();
    	Ardoise ardoise = new Ardoise();
     
    	EssaiChoix() {
    		JPanel panneau = new JPanel();
    		combo1.addItem("noir");
    		combo1.addItem("rouge");
    		combo1.addItem("vert");
    		combo1.addItem("bleu");
    		combo1.addItem("jaune");
    		combo1.setToolTipText("combo1");
    		combo2.addItem("1");
    		combo2.addItem("2");
    		combo2.addItem("3");
    		combo2.addItem("4");
    		combo2.addItem("5");
    		combo2.setToolTipText("combo2");
    		panneau.add(combo1);
    		panneau.add(combo2);
    		combo1.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				ardoise.setForeground(getCouleur((String) combo1
    						.getSelectedItem()));
    			}
    		});
    		combo2.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				combo1.setSelectedIndex(combo2.getSelectedIndex());
    			}
    		});
    		setLayout(new BorderLayout(5, 5));
    		add(panneau, BorderLayout.NORTH);
    		add(panneau, BorderLayout.EAST);
    		add(ardoise, BorderLayout.CENTER);
    	}
     
    	public void itemStateChanged(ItemEvent evt) {
    		ardoise.setForeground(getCouleur((String) combo1.getSelectedItem()));
    	}
     
    	Color getCouleur(String s) {
    		if (s.equals("noir"))
    			return Color.black;
    		else if (s.equals("rouge"))
    			return Color.red;
    		else if (s.equals("vert"))
    			return Color.green;
    		else if (s.equals("bleu"))
    			return Color.blue;
    		else if (s.equals("jaune"))
    			return Color.yellow;
    		return Color.black;
    	}
     
    	public static void main(String[] argv) {
    		JFrame monCadre = new JFrame();
    		monCadre.setTitle("Ardoise");
    		monCadre.setContentPane(new EssaiChoix());
    		monCadre.addWindowListener(new WindowAdapter() {
    			public void windowClosing(WindowEvent e) {
    				System.exit(0);
    			}
    		});
    		monCadre.pack();
    		monCadre.setVisible(true);
    	}
    }
     
    class Ardoise extends JPanel {
    	Ardoise() {
    		setPreferredSize(new Dimension(100, 100));
    	}
     
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		g.fillOval(10, 10, 130, 80);
    	}
    }
    
    0
    1. merci,
      Mais malheureusement tu as tombé dans la 2ième cas.
      je ne veux pas que l'évènement s'exécuter lorsque le choix est fait par comb2.
      cordialement.
      0