Problem Listener JComboBox

zem_moh Messages postés 10 Statut Membre -  
zem_moh Messages postés 10 Statut Membre -
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

2 réponses

nabil07 Messages postés 161 Statut Membre 64
 
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
zem_moh Messages postés 10 Statut Membre
 
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