Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/03/2013, à 15:26

yayals

Passer la méthode actionPerformed dans une autre class (Java)

Bonjour,
j'aimerais savoir comment faire pour passer la méthode actionPerformed dans une autre class. Je m'explique:
quand je fais un programme en interface graphique je met la méthode actionPerformed (qui permet de définir les actions que doivent effectuer les boutons) a la fin de la class dans laquelle je construit mon interface graphique.
Par exemple dans ce programme (complètement idiot)

public class Main {
	public static void main(String[] args) {
		Fenetre fen = new Fenetre();
	}
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class Fenetre extends JFrame implements ActionListener {
	private JPanel container = new JPanel();
	protected JLabel label = new JLabel("Vous n'avez pas cliquer");
	private JButton bouton = new JButton("+1");
	
	public Fenetre(){
		this.setTitle("Test");
		this.setSize(300, 300);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
		container.setLayout(new BorderLayout());
		container.add(bouton, BorderLayout.SOUTH);
		bouton.addActionListener(this);
		container.add(label, BorderLayout.NORTH);
		this.setContentPane(container);
	}
	public void actionPerformed(ActionEvent a){  
		label.setText("Vous avec cliqué");
	}
}

la méthode se trouve a la fin de la class Fenetre. J'aimerais la passer dans une class qui s’appellerait (par exemple) ActionBoutons.
Comment faire ??
Merci d'avance

ps: si je n'ai pas été assez clair dites-le moi smile


ACER aspire 5740g: Ubuntu 14.04

Hors ligne

#2 Le 12/03/2013, à 16:25

The_AkerShow

Re : Passer la méthode actionPerformed dans une autre class (Java)

Dans la class actionBoutton :

public class Main {
	public static void main(String[] args) {
           (exanple)string i = (nom de la class).(variable de la fenaitre);
	}

et dormalman sa marche smile
Tu peux m'apprandre comment faire une fenaitre stp roll

Dernière modification par The_AkerShow (Le 12/03/2013, à 16:28)

Hors ligne

#3 Le 12/03/2013, à 17:13

yayals

Re : Passer la méthode actionPerformed dans une autre class (Java)

heuuuu je ne comprend pas trop ta réponse. Te me dit de mettre ça dans la classe ActionBouton mais tu me donne une classe main. Et puis ça ne règleregle pas mon problème étant donné qui ma méthode actionPerformed est toujours dans la classe Fenetre.
Sinon pour apprendre a faire des fenêtres tu peut aller voir ici: http://www.siteduzero.com/informatique/ … re-fenetre


ACER aspire 5740g: Ubuntu 14.04

Hors ligne

#4 Le 12/03/2013, à 21:09

cledesol

Re : Passer la méthode actionPerformed dans une autre class (Java)

Bonsoir

Je pense que tu peux définir une classe MonBouton qui créera ton bouton et contiendra la méthode actionListener définissant l'action du bouton.

Dans ta classe fenêtre, tu appelles ta classe MonBouton pour créer ton bouton.

Cordialement


Bon, eh bien je vais partir en Théorie parce qu'en Théorie, tout se passe bien ....

Hors ligne

#5 Le 13/03/2013, à 12:45

yayals

Re : Passer la méthode actionPerformed dans une autre class (Java)

Saut
Ta technique semble intéressante. Du coup j'ai fais ceci:
Class Fenetre:

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class Fenetre extends JFrame {
	private JPanel container = new JPanel();
	private JLabel label = new JLabel("Vous n'avez pas cliqué");
	Bouton1 bout1 = new Bouton1();
	public Fenetre(){
		this.setTitle("Test");
		this.setSize(300, 300);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		container.setLayout(new BorderLayout());
		container.add(bout1, BorderLayout.SOUTH);
		container.add(label, BorderLayout.NORTH);
		this.setContentPane(container);
	}
}

Class Bouton1

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;


public class Bouton1 extends JButton implements ActionListener {
	JButton bouton = new JButton("+1");
	public void actionPerformed(ActionEvent a){
		label.setText("vous avez cliqué");
	}
}

La classe Main reste la même.
Par contre dans la classe Bouton1 il me dit qu'il ne connais pas label.
Comment régler ce problème ?


ACER aspire 5740g: Ubuntu 14.04

Hors ligne

#6 Le 13/03/2013, à 13:45

Jules Petibidon

Re : Passer la méthode actionPerformed dans une autre class (Java)

C'est un peu normal vu que ton label appartient à ta classe Fenetre, et que ta classe Bouton1 n'a aucune vue sur celle ci.

À partir de là je te laisse trouver la solution tout seul, ça coule de source wink

Hors ligne

#7 Le 27/03/2013, à 15:19

yayals

Re : Passer la méthode actionPerformed dans une autre class (Java)

Ca j'avais bien compris. Par contre je ne trouve pas comment faire pour que la classe Bouton1 voie Fenetre (je débute en java et j'ai encore un peu de mal avec le système de classes). J'ai essayé avec des assesseurs et des mutateurs mais tout ce que j'ai fais c'est mettre du bazar dans le code.


ACER aspire 5740g: Ubuntu 14.04

Hors ligne

#8 Le 27/03/2013, à 21:02

cledesol

Re : Passer la méthode actionPerformed dans une autre class (Java)

Et si tes classes Fenetre et Bouton1 appartenaient au même package .....


Bon, eh bien je vais partir en Théorie parce qu'en Théorie, tout se passe bien ....

Hors ligne

#9 Le 27/03/2013, à 21:44

yayals

Re : Passer la méthode actionPerformed dans une autre class (Java)

J'ai mis les classes Bouton1 et Fenetre dans le même package et j'ai laissé la Main dans le package par défaut. Ca n'a rien changé le problème es toujours le même. J'ai même essayé de déclarer label en public. Rien n'y fais.


ACER aspire 5740g: Ubuntu 14.04

Hors ligne

#10 Le 28/03/2013, à 01:23

jamesbad000

Re : Passer la méthode actionPerformed dans une autre class (Java)

hello,

Tu devrais peut-être commencer par lire un truc sur les concept de base, parce que là tu me semble partir d'un peu loin.
sur le site http://docs.oracle.com/javase/tutorial/java/index.html Le trail Learning the Java Language, est vraiment efficace et me semblerait bien adapté... Mais il est en englais...

Déjà vouloir passer une méthode java à une autre classe est hors de propo.
- On ne passe que des objets ou des variables de types primitifs (tel int, char) en paramètre, et les méthode sont des membres d'objets.
- Donc si tu veux accéder à une méthode ou une variable d'un autre objet, et bien il faut passer l'objet en question en paramètre :

Maintenant pour ton problème de label :

1 - Soit ajouter un constructeur à ton objets bouton pour qu'il reçoive l'objet en paramètre lors de l'instanciation:

Bouton1 bout1 = new Bouton1(label);
class Bouton1 ....
JLabel message;

/* constructeur */
public Bouton1(JLabel message){
   super(); // appel obligatoire du constructeur de l'objet parent
/* Transfert le paramètre visible seulement dans la procédure, dans une variable d'instance visible depuis toutes les méthodes d'instance de Bouton1 */
   this.message = message; 
}

Maintenant toutes les propriétés et méthodes publique du label... sont accessibles par toutes méthodes d'instance (non static) de la classe Bouton1

2 - soit faire une méthode setMessage(JLabel message) par ex que tu appelle pour passer le label au bouton, après l'instanciation :

bout1.setMessage(label);

Dernière modification par jamesbad000 (Le 28/03/2013, à 01:35)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne

#11 Le 29/03/2013, à 19:50

yayals

Re : Passer la méthode actionPerformed dans une autre class (Java)

Merci de ta réponse jamesbad000. J'ai relu certains passages (qui ne devait être pas très clairs dans ma tête) du tuto que j'ai utilisé pour apprendre a programmer et je me suis rendu compte de ma bêtise. Pour pouvoir accéder a label il suffisait d'instancier la classe Fenetre dans la classe Bouton1 et d'indiquer que label se trouve dans la classe Fenetre. ce qui me donne une classe bouton comme celle-ci

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;



public class Bouton1 extends JButton implements ActionListener {
	Fenetre fen = new Fenetre();
	JButton bouton = new JButton("+1");
	public void actionPerformed(ActionEvent a){
		fen.label.setText("vous avez cliqué");
	}
}

et la victoire ! Plus d’erreurs de compilation. Le programme ne s’exécute pas pour autant. Quand je le lance a partir d'un terminal, il ne me retourne rien, aucune fenêtre n'apparais et je processeur tourne tout a coup a 100 %.
Savez-vous pourquoi ?


ACER aspire 5740g: Ubuntu 14.04

Hors ligne

#12 Le 29/03/2013, à 20:24

pierrelm

Re : Passer la méthode actionPerformed dans une autre class (Java)

Plusieurs remarques :
* Crée le bouton dans la classe fenetre plutôt que la fenetre dans le bouton. Le bouton doit être un attribut de la classe Fenetre.
* Dans la classe Bouton1, tu instancies un bouton de type JButton. Comme Bouton1 étend JButton, ce n'est pas logique. Comme indiqué par James, crée un constructeur :

/* constructeur */
public Bouton1(JLabel message){
   super("+1"); // appel obligatoire du constructeur de l'objet parent
   this.message = message; 
}

Ainsi plutôt que d'avoir 2 objets, un Bouton1 et un JButton, tu en auras un seul qui sera à la fois un Bouton1 avec l'attribut message et un JButton  (appel au constructeur avec le paramètre "+1")
* Maintenant, si tu m'as suivi jusqu'au bout, dans ton main, pour afficher la fenêtre, il faudra au moins faire un fen.show().

Hors ligne

#13 Le 29/03/2013, à 21:31

jamesbad000

Re : Passer la méthode actionPerformed dans une autre class (Java)

J'avais zappé le fait qu'un JButton était créé dans Bounton1. Et effectivement il n'a aucune utilité.

Et comme indiqué par pierrelm. il faut créer le bouton dans la fenêtre, et non l'inverse. Autrement tu va rapidement te trouver confronté à des problèmes insolubles. En effet,  comment avoir 2 boutons dans une fenêtre si c'est le bouton qui contient la fenêtre !?

En plus si tu as laissé l'instanciation de Button1 dans la fenêtre : Button1 créé une nouvelle Fenetre qui créé un nouveau Buntton1... et ainsi de suite, jusqu'à explosion de la pile d'appel.


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne

#14 Le 17/11/2018, à 18:29

loubna13

Re : Passer la méthode actionPerformed dans une autre class (Java)

Bonsoir ! je veux que on cliquant sur un bouton "Commencer" une autre  interface s'affichera
[img=voila ]C:\Users\G50\OneDrive\Documents\l[/img]
C urgent svp !!!

Dernière modification par loubna13 (Le 17/11/2018, à 18:31)

Hors ligne

#15 Le 19/11/2018, à 19:21

jamesbad000

Re : Passer la méthode actionPerformed dans une autre class (Java)

Bonsoir.

Le plus urgent serait que tu lises et applique les règles du forum https://forum.ubuntu-fr.org/misc.php?action=rules. Et notamment dans ton cas:

1 - ne pas arguer de l'urgence
2 - ouvrir son propre fil de discussion pour une nouvelle question/problème
3 - Donner des éléments permettant de comprendre le problème à résoudre (dans ton cas le code que tu n'arrive pas à faire fonctionner)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne