Java | addActionListener

Résolu/Fermé
Xineroks Messages postés 158 Date d'inscription lundi 9 janvier 2012 Statut Membre Dernière intervention 25 janvier 2014 - 13 avril 2012 à 13:09
Xineroks Messages postés 158 Date d'inscription lundi 9 janvier 2012 Statut Membre Dernière intervention 25 janvier 2014 - 13 avril 2012 à 13:53
Bonjour,

Je souhaite avoir un peu d'aide niveau code, j'ai testé plusieurs façon mais je ne trouve pas mon bonheur c'est pourquoi je viens ici, voici mon code simplifié :

private void ajoutVins() {
		JTextField nomTF = new JTextField();
		JTextField contTF = new JTextField();
		JTextField prixTF = new JTextField();
		JTextField anneeTF = new JTextField();
		JTextField qteTF = new JTextField();
		
		JComboBox cepCB = new JComboBox();
		JComboBox appCB = new JComboBox();
		JComboBox regCB = new JComboBox();
		JComboBox paysCB = new JComboBox();
		JComboBox catCB = new JComboBox();
		
		
		JButton boutBtn = new JButton("Ajouter");
		JButton cepBtn = new JButton("Ajouter");
		JButton appBtn = new JButton("Ajouter");
		JButton regBtn = new JButton("Ajouter");
		JButton paysBtn = new JButton("Ajouter");
		JButton catBtn = new JButton("Ajouter");
			
		nomTF.setSize(90,15);
		nomTF.setLocation(95,15);
		
		contTF.setSize(90,15);
		contTF.setLocation(95,30);
		
		prixTF.setSize(90,15);
		prixTF.setLocation(95,45);

		anneeTF.setSize(90,15);
		anneeTF.setLocation(95,60);

		qteTF.setSize(90,15);
		qteTF.setLocation(95,75);		

		catCB.setSize(90,15);
		catCB.setLocation(95,90);

		paysCB.setSize(90,15);
		paysCB.setLocation(95,105);		

		regCB.setSize(90,15);
		regCB.setLocation(95,120);

		cepCB.setSize(90,15);
		cepCB.setLocation(95,135);		

		appCB.setSize(90,15);
		appCB.setLocation(95,150);
		
		boutBtn.setSize(185,20);
		boutBtn.setLocation(0,170);	
		boutBtn.setName("boutBtn");
		boutBtn.addActionListener(this);	

		panAjout.add(catCB);
		panAjout.add(paysCB);
		panAjout.add(regCB);
		panAjout.add(cepCB);
		panAjout.add(appCB);		
		panAjout.add(nomTF);
		panAjout.add(contTF);
		panAjout.add(prixTF);
		panAjout.add(anneeTF);
		panAjout.add(qteTF);
		panAjout.add(boutBtn);

		panAjout.setVisible(true);
		
	}


public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		Object obj = arg0.getSource();
		if (((JButton) obj).getName()=="boutBtn"){			
			JOptionPane.showMessageDialog(this,"Bouton Bouteille","Le Message du Bouton",JOptionPane.INFORMATION_MESSAGE,null);
		}
	}


Et ma question est : Comment puis recuperer les valeurs des TextFields dans ma méthode actionPerformed() pour ainsi les utiliser ?

Merci d'avance,

Xineroks
A voir également:

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 13/04/2012 à 13:20
Déjà getName()=="boutBtn" ne peut pas fonctionner, car l'opérateur == compare les références sur l'objet, pas l'objet lui même, il faut utiliser la méthode equals.

Ensuite, ta méthode actionPerformed doit être défini dans une classe (éventuellement anonyme) qui étend de la classe ActionListener, et dont un objet est passé via un des Component (un bouton par exemple) avec la méthode addActionListener.
Mais pour accéder à l'intérieur du Listener, aux objets situés en dehors de la classe, il faudra que ceux-ci possèdent le mot-clé "final" ce qui assure qu'il n'y aura qu'une seule référence pour les représenter.

J'avoue que ça fait pas mal d'explications d'un coup, mais le code que tu nous as donné est trop incomplet pour qu'on puisse s'en servir et te montrer comment faire.
La confiance n'exclut pas le contrôle
0
Xineroks Messages postés 158 Date d'inscription lundi 9 janvier 2012 Statut Membre Dernière intervention 25 janvier 2014 3
13 avril 2012 à 13:30
Tout d'abord Merci pour ta réponse qui est arrivée très rapidement.

Ensuite le "==" fonctionne, j'obtiens bien le message, mais c'est vrai que le equals est plus approprié, je vais donc l'utiliser.

Et pour la classe anonyme si je comprend bien je dois faire une classe qui hérite d'ActionListener.

Faire mes TextField de cette façon : final JTextField unTexte = new JTextField();

et lorsque que je fais un addActionListener sur le bouton, je met en paramètre mes TF ? Comme : boutBtn.addActionListener(this, unTexte, ...);

J'ai un peu de mal à concevoir la chose.

Pour le code je veux bien le poster entièrement, mais j'ai tendance à penser que si il y a trop de code on zappe direct.
Le voici pour les courageux ( s'agit uniquement de l'IHM ) :
https://pastebin.com/GgLEcA9k

Merci encore pour ces conseils,

Cordialement,
Xineroks
0
Xineroks Messages postés 158 Date d'inscription lundi 9 janvier 2012 Statut Membre Dernière intervention 25 janvier 2014 3
13 avril 2012 à 13:35
Ah, et pardon pour l'Edit, mais avec l'equals. Je dois bien faire obj.equals(boutBtn) ?
mais le soucis c'est que la aussi je n'ai pas acces à boutBtn. Ce qui s'arrangera certainement avec la nouvelle classe
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
13 avril 2012 à 13:43
Quand on parle de classe anonyme ça veut dire que la classe n'est pas déclarée mais utilisée directement dans le code, c'est particulièrement pratique pour instancier des interfaces :

boutBtn.addActionListener(
    new ActionListener() // Création "en live" d'un classe sans nom qui implémente l'interface ActionListener, et instanciation directe d'un objet de cette classe pour le passer en argument de la méthode.
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            // ...
        }
    });

Remarque : lors de la compilation cette classe sera nommée Fenetre$1, c'est pour ça que l'on dit qu'elle est anonyme...

Faire ceci pour chaque bouton, est plus compréhensible, et plus propre, que de créer un ActionListener pour toute la JFrame. Entre autre parce que la JFrame est soumise à toute sortes d'évènements en permanence et que le traitement des if sur getSource va la ralentir inutilement.
0
Xineroks Messages postés 158 Date d'inscription lundi 9 janvier 2012 Statut Membre Dernière intervention 25 janvier 2014 3
13 avril 2012 à 13:53
Ah, d'accord très bien, j'avais déjà vu ce genre de code, mais avec ce que j'avais vu en cours je pensais que ce n'était pas optimiser de faire une méthode pour chaque événement.
Je comprend mieux à présent.
Je te remercie vraiment pour ta réponse. Je vais donc tester et "Marquer comme résolu" sauf si problème =).
0