Problem Listener JComboBox

Fermé
zem_moh Messages postés 10 Date d'inscription mardi 26 juillet 2005 Statut Membre Dernière intervention 18 janvier 2010 - 14 oct. 2009 à 15:46
zem_moh Messages postés 10 Date d'inscription mardi 26 juillet 2005 Statut Membre Dernière intervention 18 janvier 2010 - 14 oct. 2009 à 21:07
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 140 Date d'inscription vendredi 14 septembre 2007 Statut Membre Dernière intervention 10 avril 2014 64
14 oct. 2009 à 17:31
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 Date d'inscription mardi 26 juillet 2005 Statut Membre Dernière intervention 18 janvier 2010
14 oct. 2009 à 21:07
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

Discussions similaires