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

Java Discussion :

Portée d'instance de classe.


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Par défaut Portée d'instance de classe.
    Bonsoir tout le monde !

    Je suis sur un petit projet et j'ai quelques questions pour lesquelles je n'arrive pas à trouver la solution ...

    J'ai une classe StrategoBackground dans laquelle je fais plusieurs réglages de fenêtre, de composants etc ...
    Via cette classe, je peut créer une nouvelle fenêtre NewGameFrame proposant un nouveau jeu au joueur.
    Cette classe (NewGameFrame) appelle une méthode randomizePiecesPositions d'une autre classe (PlacePieces), forcément, cette méthode intervient sur les attributs de la classe StrategoBackground pour y place des pions.

    Lors de l'appel de NewGameFrame dans Stratego Background :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class StrategoBackground extends JFrame{
    private void newGameActionPerformed(ActionEvent e){
    NewGameFrame newGameFrame = new NewGameFrame(this);
    }
    }
    Je passe l'instance courante afin de garder tout les attributs.

    Dans la classe NewGameFrame :
    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
     
    public class NewGameFrame extends JFrame{
    StrategoBackground stb; 	
     
    	public NewGameFrame(StrategoBackground stb){		
    		this.stb = stb; 
    		initComponents(this.stb); 
    	}
     
    	private void playActionPerformed(ActionEvent e){		
    		// TODO : Methode de random des pions. 
    		PlacePieces pp = new PlacePieces(this.stb); 
    		if(randomize.isSelected())
    			pp.randomizePiecesPositions(); 		
    	}
    }
    Je garde donc l'instance courante de StrategoBackground.

    Et enfin, dans PlacePieces :
    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
     
    public class PlacePieces 
    {	
    	StrategoBackground stb; 
    	public PlacePieces(StrategoBackground stb){
    		this.stb = stb; 
    	}
     
          public void randomizePiecesPositions(){		
    		JLabel battleBackground = stb.getBattleBackground();
    		Pions tabPions[][] = new Pions[10][10]; 
     
    		for(int l = 0 ; l < 10 ; l++)
    		{
    			for(int c = 0 ; c < 10 ; c++)
    			{
    				/*Creation du tableau de Pions*/
    			}	
    		}
     
    		//stb.setTabButtons(tabPions); 
    	 	stb.setBattleBackground(battleBackground); 
    		System.out.println("ICI : " +stb.getTest());
    	}
    }
    Je n'arrive pas au résultat escompter.

    D'ou viens la perte de mes informations de l'instance courante de StrategoBackground ?

    A noter que si j'appele la méthode randomizePiecesPosition *depuis* StrategoBackground, tout fonctionne ...

    Des idées ?

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Il n'y a pas de perte d'information. Es-tu sur que newGameActionPerformed et playActionPerformed sont bien appelés?

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Par défaut
    Oui, toutes les deux sont appelées via un actionListener :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class NewGameFrame extends JFrame
    {
       /*Bla bla bla */
                          play.addActionListener(new ActionListener(){			
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				playActionPerformed(e); 				
    			}
    		});
    }
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class StrategoBackground extends JFrame
    {
                            newGame.addActionListener(new ActionListener() {			
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				newGameActionPerformed(e);
    			}
    		});
    }
    Je dois dire que je suis un peu perdu ...

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je demande la confirmation qu'on est rentré dedans (System.out.println par exemple). Je peux mettre beaucoup de chose dans des actionListeners qui ne seront jamais appelé

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Par défaut
    Ah sorry

    Oui, j'entre bien dedans en mettant à chaque fois un sysout (dans les deux):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     play.addActionListener(new ActionListener(){			
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				playActionPerformed(e); 
    				System.out.println("Play Action Performed"); 
    			}
    		});
    Ainsi que dans la méthode elle-même (dans les deux aussi) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private void newGameActionPerformed(ActionEvent e)
    	{
    		// TODO 
    		NewGameFrame newGameFrame = new NewGameFrame(this); 
    		System.out.println("New Game"); 
    	}

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ok, a chaque niveau de tes appels (création des listeners, enregistrement des listener, appel des listener, appel des méthodes dans par les listeners), tu peux afficher la valeur de StrategoBackground ? Histoire qu'on découvre à quel endroit tu mixe les deux.

    Es-tu sur de ne pas faire un new StrategoBackground quelque part?

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 04/07/2011, 17h13
  2. Exporter une instance de classe au format XML ou XMI
    Par Scorpion Rouge dans le forum Persistance des données
    Réponses: 2
    Dernier message: 22/12/2005, 11h19
  3. Réponses: 2
    Dernier message: 09/10/2005, 15h35
  4. Instance de classes
    Par KymZen dans le forum Tkinter
    Réponses: 9
    Dernier message: 07/04/2005, 08h35
  5. Conditions de destruction des instances de classes
    Par elvivo dans le forum Général Python
    Réponses: 4
    Dernier message: 29/12/2004, 17h16

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