IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Récupération de la variable d'une autre classe


Sujet :

avec Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Récupération de la variable d'une autre classe
    Bonjour,j'ai un soucis pour récup une variable d'un de mes panel.

    J'ai une main qui instancie un Gui (JFrame) qui contient 3 Panel(PanneauM,PanneauD,PanneauG) qui sont des JPanel

    J'ai aussi une classe Gestionnaire gui gère les Listener , j'ai des listener sur mes boutons dans le panneauD, j'instancie mon Gestionnaire dans panneau droit et j'envoi la récup des action des mes boutons à celui-ci maintenant je ne sais pas comment récupter le comparer au e.getsource() == ? et tant donner qu'ils sont dans des classes différentes

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Si tu as un event sur un bouton ta source sera ton bouton et non ton panel.
    Mais il est possible de fait un getParent() pour avoir ton panel correspondant.

    Supposons que tu ai dans ton JFrame :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public JPanel getPanneauM();
    public JPanel getPanneauD();
    public JPanel getPanneauG();
    Alors tu pourra faire un equals pour vérifier dans quel panel tu es.

    Par contre tu pourrai ajouter un paramètres lorsque tu appel ton listener à ton gestionnaire.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Voici ma main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package rev;
    public class Ex {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
     
    	Gui g1 = new Gui();
    	}
    }
    Mon GUI
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    /**
     * 
     */
    package rev;
     
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JFrame;
     
     
    /**
     * @author Nick
     *
     */
    class Gui extends JFrame {
    	PanneauGauche pg = new PanneauGauche();
    	PanneauMilieu pm = new PanneauMilieu();
    	PanneauDroit pd = new PanneauDroit();
    	public Gui(){
     
    		//Config de la JFRAME
    		this.setVisible(true);
    		this.setSize(800, 800);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setLayout(new GridLayout(0,3));
    		this.add(pg);
    		this.add(pm);
    		this.add(pd);
     
    		//FIN CONFIG
    	}
    	public PanneauDroit getPanneau(){
    		return pd;
    	}
     
     
    }
    Mon Panneau de droite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    package rev;
     
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.ButtonGroup;
    import javax.swing.JPanel;
    import javax.swing.JRadioButton;
     
    public class PanneauDroit extends JPanel {
    	Gestion g1 = new Gestion();
    	JRadioButton carre = new JRadioButton("Carré");
    	JRadioButton cercle= new JRadioButton("Cercle");
    	JRadioButton triangle= new JRadioButton("Triangle");
    	ButtonGroup bg1 = new ButtonGroup();
    	public PanneauDroit()
    	{
    		this.setLayout(new GridLayout(3,0));
    		bg1.add(carre);
    		bg1.add(cercle);
    		bg1.add(triangle);
    		this.carre.addActionListener(g1);
    		this.cercle.addActionListener(g1);
    		this.triangle.addActionListener(g1);
    		this.add(carre);
    		this.add(cercle);
    		this.add(triangle);
    	}	
     
    }
    Mon panneau du milieu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    package rev;
     
    import java.awt.GridLayout;
     
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
    public class PanneauMilieu extends JPanel {
    	Gestion g1 = new Gestion();
    	JTextField jf1 = new JTextField();
    	JTextField jf2 = new JTextField();
    	JTextField jf3 = new JTextField();
    	JLabel jl1 = new JLabel("Rouge");
    	JLabel jl2 = new JLabel("Bleu");
    	JLabel jl3 = new JLabel("Vert");
     
    	public PanneauMilieu()
    	{
    		this.setLayout(new GridLayout(3,2));
    		this.add(jl1);
    		this.add(jf1);
    		jf1.addActionListener(g1);
    		this.add(jl2);
    		this.add(jf2);
    		jf2.addActionListener(g1);
    		this.add(jl3);
    		this.add(jf3);
    		jf2.addActionListener(g1);
    	}
    }
    Mon panneau de gauche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    package rev;
     
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Polygon;
     
    import javax.swing.JPanel;
     
    public class PanneauGauche extends JPanel {
    	PanneauGauche(){
    	this.setBackground(Color.blue);
    	}
     
    	public void paintComponent(Graphics g){
    		super.paintComponent(g);
    		int xPoly[]={10,50,90};
    	     int yPoly[]={150,250,150};
     
    	  Polygon poly = new Polygon(xPoly, yPoly, xPoly.length);
         g.drawRect(10, 10, 50, 50);
         g.drawOval(10, 70, 50, 50);
         g.drawPolygon(poly);
    }
    }
    Mon gestionnaire d'écouteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    package rev;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    public class Gestion implements ActionListener {
     
     
    	public Gestion(){	
     
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent e){
    		// TODO Auto-generated method stub
    }
     
     
    }

  4. #4
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Je vois ce que tu veux faire. Mais tu ne t'y prend pas de la bonne manière.
    Cela donne l'impression que tu veux avoir une structure MVC. Tout en ayant aucune idée de ce que cela implique au niveau conception.

    Il est certes vraie qu'il te faut qu'un seul gestionnaire (en théorie).
    Mais il te faut plusieurs action ActionListener qui ne sont justement pas ton gestionnaire.

    Les ActionListener sont lié à ton interface. Alors que ton gestionnaire s'en contre-fiche.
    Il te faut des déclarations de se type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    this.carre.addActionListener(new ActionListener() {
     
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		gestionnaire.changeCurrentFormToSquare();
    	}
    });
    Ainsi ton gestionnaire sait dans quel cas, il se trouve et quoi faire.

    Cordialement,
    Patrick Kolodziejczyk.

    Note : Tu peux aussi déclare test ActionListener comme des classes.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par kolodz Voir le message
    Je vois ce que tu veux faire. Mais tu ne t'y prend pas de la bonne manière.
    Cela donne l'impression que tu veux avoir une structure MVC. Tout en ayant aucune idée de ce que cela implique au niveau conception.

    Il est certes vraie qu'il te faut qu'un seul gestionnaire (en théorie).
    Mais il te faut plusieurs action ActionListener qui ne sont justement pas ton gestionnaire.

    Les ActionListener sont lié à ton interface. Alors que ton gestionnaire s'en contre-fiche.
    Il te faut des déclarations de se type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    this.carre.addActionListener(new ActionListener() {
     
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		gestionnaire.changeCurrentFormToSquare();
    	}
    });
    Ainsi ton gestionnaire sait dans quel cas, il se trouve et quoi faire.

    Cordialement,
    Patrick Kolodziejczyk.

    Note : Tu peux aussi déclare test ActionListener comme des classes.
    Merci de la réponse, je n'ai pas vu le modèle MVC c'est juste que l'énnoncé de l'exercice nous obligent à gérer nos écouteurs dans une autre classe.

    si j'ai bien compris tu instancies un écouteur d’événement anonyme dans la classe ce n'est donc plus le gestionnaire qui écoute mais il c'est lui qui reçois l'information qu'il faut changer de forme via une méthode.

  6. #6
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Oui. Après si il faut que cela soit un classe d'écoute. Tu peux crée une classe d'écoute pour chaque action et l’instancier pour chaque action. Mais l'utilité est réduite...

    Si cela fait partie d'un exercice. Je te conseil d'aller voir la personne qui te l'a donner. Tu peux même l'inviter à répondre ici. je serai ravis d'avoir son point de vue sur la question.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    J'arrive à écouter mes buttons sans soucis comme je l'ai fait actuellement mais je n'arrive pas à avoir accès à mon panneau gauche pour dessiner dedans à partir de mon gestionnaire

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    J'ai retravaillé un peu sur l'exercice et le résultat est fonctionnel mais j'ai l'impression d'avoir un peu contourner mon problème, j'aurais voulu votre avis pour savoir ce qu'y est a retravailler.

    Ma classe main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    package rev;
    public class Ex {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
     
    	Gui g1 = new Gui();
    	}
     
     
    }
    Mon Gui :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    /**
     * 
     */
    package rev;
     
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JFrame;
     
    class Gui extends JFrame {
    	public PanneauGauche pg = new PanneauGauche(this);
    	public PanneauMilieu pm = new PanneauMilieu(this);
    	public PanneauDroit pd = new PanneauDroit(this);
    	public Gui(){
     
    		//Config de la JFRAME
    		this.setVisible(true);
    		this.setSize(800, 800);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setLayout(new GridLayout(0,3));
    		this.add(pg);
    		this.add(pm);
    		this.add(pd);
     
    		//FIN CONFIG
    	}
    	public PanneauDroit getPanneau(){
    		return pd;
    	}
     
     
    }
    Le panneau droit de ma JFrame(Gui) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    package rev;
     
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.ButtonGroup;
    import javax.swing.JPanel;
    import javax.swing.JRadioButton;
     
    public class PanneauDroit extends JPanel {
    	private Gui ggg;
    	Gestion g1 =null ;
    	JRadioButton carre = new JRadioButton("Carré");
    	JRadioButton cercle= new JRadioButton("Cercle");
    	JRadioButton triangle= new JRadioButton("Triangle");
    	ButtonGroup bg1 = new ButtonGroup();
    	public PanneauDroit(Gui gggg)
    	{
    		this.ggg=gggg;
    		this.setLayout(new GridLayout(3,0));
    		bg1.add(carre);
    		bg1.add(cercle);
    		bg1.add(triangle);
    		g1 = new Gestion(ggg);
    		this.carre.addActionListener(g1);
    		this.cercle.addActionListener(g1);
    		this.triangle.addActionListener(g1);
    		this.add(carre);
    		this.add(cercle);
    		this.add(triangle);
    	}	
     
    }
    Le panneau gauche de ma JFrame(Gui)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    package rev;
     
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Polygon;
     
    import javax.swing.JPanel;
     
    public class PanneauGauche extends JPanel {
    private int forme=0;
    private Color cg;
    	public PanneauGauche(Gui gggg){
     
    	}
     
    	public void paintComponent(Graphics g){
    		super.paintComponent(g);
    		int xPoly[]={10,50,90};
    	    int yPoly[]={150,250,150};
     
    	    this.setBackground(cg);
     
    	  Polygon poly = new Polygon(xPoly, yPoly, xPoly.length);
    	  if (this.forme==1)
          g.drawRect(10, 10, 50, 50);
     
    	  if (this.forme==2)
          g.drawOval(10, 70, 50, 50);
    	  if(this.forme==3)
          g.drawPolygon(poly);
     
    }	
     
    	public void setForme(int form){
    		this.forme=form;
    	}
     
    	public void setColor(Color c){
     
    		this.cg=c;
    	}
    }
    et le panneau du milieu de ma JFrame(Gui)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    package rev;
     
    import java.awt.GridLayout;
     
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
    public class PanneauMilieu extends JPanel {
    	Gestion g1;
    	Gui ggg;
    	JTextField jf1 = new JTextField();
    	JTextField jf2 = new JTextField();
    	JTextField jf3 = new JTextField();
    	JLabel jl1 = new JLabel("Rouge");
    	JLabel jl2 = new JLabel("Bleu");
    	JLabel jl3 = new JLabel("Vert");
     
    	public PanneauMilieu(Gui gggg)
    	{
    		this.ggg=gggg;
    		g1 =new  Gestion(this.ggg);
    		this.setLayout(new GridLayout(3,2));
    		this.add(jl1);
    		this.add(jf1);
    		jf1.addActionListener(g1);
    		this.add(jl2);
    		this.add(jf2);
    		jf2.addActionListener(g1);
    		this.add(jl3);
    		this.add(jf3);
    		jf3.addActionListener(g1);
    	}
    }
    et ma classe qui gère les écouteurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    package rev;
     
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    public class Gestion implements ActionListener {
    private Gui ggg;
    private Color c1;
    private int x=255,y=255,z=255;
     
    public Gestion(){	
    	super();
    }
    public Gestion(Gui gggg){	
    		super();
    		this.ggg=gggg;
    	}
    	@Override
    	public void actionPerformed(ActionEvent e){
    		// TODO Auto-generated method stub
    		if (e.getSource()==ggg.pm.jf1)
    		{
    			this.x = Integer.parseInt(e.getActionCommand());
    			this.c1 = new Color(x,y,z);
    			ggg.pg.setColor(c1);
    			ggg.pg.repaint();
    		}
    		if (e.getSource()==ggg.pm.jf2)
    		{
    			this.y = Integer.parseInt(e.getActionCommand());
    			this.c1 = new Color(x,y,z);
    			ggg.pg.setColor(c1);
    			ggg.pg.repaint();
    		}
    		if (e.getSource()==ggg.pm.jf3)
    		{
    			this.z = Integer.parseInt(e.getActionCommand());
    			this.c1 = new Color(x,y,z);
    			ggg.pg.setColor(c1);
    			ggg.pg.repaint();
    		}
    		if (e.getActionCommand()=="Carré")	{
     
    			ggg.pg.setForme(1);
    			ggg.pg.repaint();
    		}
    		if (e.getActionCommand()=="Cercle"){
    			ggg.pg.setForme(2);
    			ggg.pg.repaint();
    		}
    		if (e.getActionCommand()=="Triangle"){
    			ggg.pg.setForme(3);
    			ggg.pg.repaint();
    		}
     
    }
     
    }

  9. #9
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Oui. Je te ferai un refacto à midi pour que tu vois à quoi ça doit ressembler
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

Discussions similaires

  1. Réponses: 6
    Dernier message: 31/05/2007, 18h10
  2. Réponses: 10
    Dernier message: 17/11/2006, 15h20
  3. Réponses: 9
    Dernier message: 20/03/2006, 16h51
  4. [PERL] accéder à une variable d'une autre classe
    Par LE NEINDRE dans le forum Langage
    Réponses: 8
    Dernier message: 11/01/2006, 17h06
  5. Récupérer une variable d'une autre classe
    Par Chris33 dans le forum Général Python
    Réponses: 2
    Dernier message: 06/12/2005, 10h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo