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 :

modifier une variable d'une classe à partir d'une autre classe


Sujet :

avec Java

  1. #1
    Débutant Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Points : 162
    Points
    162
    Par défaut modifier une variable d'une classe à partir d'une autre classe
    bonjour,

    j'ai deux questions :

    1) comment retourner plusieurs variables via une méthode ?
    2) j'ai une classe "CallBack_Boutons" (un callback en fait) et je veux modifier une variable (boolean fin) de la classe "Fenetre" via la méthode "actionPerformed". Je veux que lors du clic sur le bouton, la variable fin de "Fenetre" passe à true.

    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
    import java.awt.event.*;
    import javax.swing.*;
     
     
    class CallBack_Boutons implements ActionListener
    {
    	private int i, j;
    	private int nb_voisins;
    	private boolean visible;
    	private boolean mine;
    	private JButton bouton;
     
    	public CallBack_Boutons(JButton bouton, int nb_voisins, int i, int j, boolean mine, boolean visible)
    	{
    		super();
    		this.i=i;
    		this.j=j;
    		this.mine=mine;
    		this.bouton=bouton;
    		this.visible=visible;
    	}
     
     
    	public void actionPerformed(ActionEvent e)
    	{       	
    		if (this.visible==false)
    			this.visible=true;
     
    		if (this.mine==true)
    			JOptionPane.showMessageDialog(null,"La partie est fini perdu :'(","Fin de partie",JOptionPane.ERROR_MESSAGE);
     
    		if (bouton!=null)
    			bouton.setText("marche");
     
     
    	}
     
    }
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    import java.awt.*;
    import javax.swing.*;
     
     
    public class Fenetre extends JFrame
    {
    	private boolean fini=false;
     
    	/* taile de la zone de jeu */
    	private int largeur=10;
    	private int hauteur=10;
     
    	/* boutons de la zone de jeu */
    	private JButton zone_de_jeu[][]=new JButton[largeur][hauteur];
     
    	/* infos grille de jeu */
    	Grille grille=new Grille(largeur,hauteur);
     
    	/* création des boutons */
    	private void initBoutons(JButton boutons[][], JPanel fenetre, GridLayout gl)
    	{
    		for(int i=0;i<largeur;i++)
    		{
    			for(int j=0;j<hauteur;j++)
    			{
    				boutons[i][j]=new JButton("-");					/* création du bouton */
    				CallBack_Boutons cb=new CallBack_Boutons(boutons[i][j],this.grille.get_nb_voisins(i,j),i,j,this.grille.get_mines(i,j),this.grille.get_visibilite(i,j));
    				fenetre.add(boutons[i][j],gl);					/* ajout du bouton au GridLayout */
    				boutons[i][j].addActionListener(cb);				/* liaison du bouton et du callback */
    			}
    		}
    	}
     
    	/* création de la fenêtre */
    	public Fenetre(String titre)
    	{	
    		super();
     
    		/* création des zones de la fenêtre */
    		JPanel fenetre=new JPanel(), haut=new JPanel(), haut_milieu=new JPanel(), milieu=new JPanel(), bas=new JPanel();
    		GridLayout gl;
    		FlowLayout fl;
    		BorderLayout bl, bdl;
    		JButton bouton;
    		Menu menu;
     
    		/* réglage des paramètres de la fenêtre */
    		this.setTitle(titre);
     
    		this.setSize(160,240);
     
    		this.setLocationRelativeTo(null); 				// On centre la fenêtre sur l'écran
     
    		this.setResizable(true);					//On permet le redimensionnement
     
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		//On dit à l'application de se fermer lors du clic sur la croix
     
    		/* ajout des zones secondaires de la fenêtre dans la zone principale (fenetre) */
    		//bl.???setmmespace(false);
    		//bl=new BoxLayout(fenetre,BoxLayout.Y_AXIS);
    		bl=new BorderLayout();
    		fenetre.setLayout(bl);
    		fenetre.add(bl.NORTH,haut);
    		fenetre.add(bl.CENTER,milieu);
    		fenetre.add(bl.SOUTH,bas);
    		setContentPane(fenetre);
     
    		bdl=new BorderLayout();
    		haut.setLayout(bdl);
    		menu=new Menu(haut,bdl);
     
    		/* bouton qui change d'état quand on clique dessus */
    		fl=new FlowLayout(FlowLayout.CENTER);
    		haut_milieu.setLayout(fl);
    		bouton=new JButton(":-)");
    		haut.add(bouton);
    		bouton.addActionListener(new BoutonsSmiley(bouton));
     
    		/* création de la zone de jeu */
    		gl=new GridLayout(largeur, hauteur);
    		milieu.setLayout(gl);
     
    		// création des boutons de la zone de jeu	
    		initBoutons(zone_de_jeu,milieu,gl);
    	}
    }
    PS : j'ai un problème de disposition dans ma fenêtre, je veux centrer un bouton dans un JPanel avec un Layout BorderLayout qui lui-même est dans un JPanel de layout BorderLayout aussi. Cependant le bouton prend toute la largeur hors je ne veux pas ça.

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Serait-il possible que les débutants ne posent qu'une question à la fois !?

    (surtout que 9 fois sur 10, la réponse c'est : allez moins vite dans vos ambitions (même si elles sont sympathiques et légitimes), et passez du temps à lire la doc)

    Bon, je réponds au moins à la première : on ne peut pas.

    (ch'u pas très avenant ce soir).

  3. #3
    Membre averti Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Points : 307
    Points
    307
    Par défaut
    Salut,
    1) comment retourner plusieurs variables via une méthode ?
    Une solution consiste à retourner un objet encapsulant ces variables, exemple:
    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
    UneClasse {
      int var1;
      String var2;
     
     public  UneClasse(int i, String s){
           var1 = i;
           var2 = s;
     }
     
     public int getVar1(){
            return var1;
    }
     public String getVar2(){
         return var2;
    } 
    }
     
    UneClasse taMethode(){
     
    .....
    }
    Attention: cela ne veut pas dire qu'on va retourner plusieurs variables via une méthode.

    Pour modifier une variable d'une classe à partir d'une deuxième crée une méthode dans la première classe pour altérer la variable en question.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void setMaVariable(....){
          .....
    }
    Pour appeler cette méthode à partir de l'autre classe tu dois passer par la faq ou un tutoriel

  4. #4
    Débutant Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Points : 162
    Points
    162
    Par défaut
    pour la première question je me doutais de la réponse mais je me demandais s'il était possible de le faire dans un langage "haut niveau" sans "bidouiller".

    Pour la deuxième question j'ai réussi assez simplement.

    Enfin certes il ne faut pas créer plusieurs thread diférent dans les forum mais si on multiplie les questions, on ne nous répond qu'à une seule donc autant poser les questions une à une. Mon dernier thread est en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/10/2013, 12h19
  2. Réponses: 9
    Dernier message: 17/10/2012, 16h34
  3. Réponses: 1
    Dernier message: 09/09/2011, 16h38
  4. Réponses: 4
    Dernier message: 10/10/2010, 23h06
  5. Instancier une class a partire d'une variable string
    Par Assimil dans le forum ASP.NET
    Réponses: 7
    Dernier message: 25/06/2008, 16h47

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