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

AWT/Swing Java Discussion :

[SWING] Changer de container


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 76
    Points
    76
    Par défaut [SWING] Changer de container
    Bonsoir tout le monde,
    J'ai commencé une petite appli avec swing et j'ai quelques erreurs que je ne comprend pas...
    En fait, j'ai fait une frame avec un Panel (SelectionPanel) qui est définis dès le départ comme container root. J'aimerais pouvoir changer ce container sur clique sur un bouton (contenu dans SelectionPanel), donc j'ai créer un ActionListener pour SelectionPanel (SelectionListner) et quand il y'a clique sur le bouton, j'appel une fonction de la classe de mon Frame (MainFram) qui change le container pour celui voulu (j'envois le titre du container et puis en fonction du tite je choisis lequel sera sélectionné, c'est pas terrible mais c'est provisoire).

    Bref, tout ça pour dire qu'il me fait cette erreur :

    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
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at SelectionListener.actionPerformed(SelectionListener.java:21)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    	at java.awt.Component.processMouseEvent(Component.java:5488)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
    	at java.awt.Component.processEvent(Component.java:5253)
    	at java.awt.Container.processEvent(Container.java:1966)
    	at java.awt.Component.dispatchEventImpl(Component.java:3955)
    	at java.awt.Container.dispatchEventImpl(Container.java:2024)
    	at java.awt.Component.dispatchEvent(Component.java:3803)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
    	at java.awt.Container.dispatchEventImpl(Container.java:2010)
    	at java.awt.Window.dispatchEventImpl(Window.java:1778)
    	at java.awt.Component.dispatchEvent(Component.java:3803)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
    	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
    Et je ne comprend pas pourquoi, pourtant tout les objet utilisé dans le code sont préalablement instanciés...
    J'ai cru que c'est parceque je ne pouvais pas interarir directement avec mon frame et que seul la classe du main le pouvait... Alors j'ai bindé les fonction du frame sur le Main et j'ai appeler les fonctions en utilisant l'objet de mon main, mais même résultat...
    A mon avis je fais une grave erreur quelque part mais je ne sais pas où...

    Voici les parties importantes de mon code :
    SelectionPanel :

    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
    import java.awt.BorderLayout;
     
    import javax.swing.JButton;
    import javax.swing.JPanel;
     
     
    public class SelectionPanel extends JPanel{
    	private JButton displayButton;
    	private SelectionListener mControler;
    	private Main mApp;
    	public SelectionPanel(Main app) {
    		//we create the controler
    		mControler = new SelectionListener(this, mApp);
    		//create the button and add the controler
    		displayButton = new JButton("Affichage");
    		displayButton.addActionListener(mControler);
     
    		this.add(displayButton);
     
    	}
    }
    SelectionListener :

    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
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JPanel;
     
     
    public class SelectionListener implements ActionListener{
     
    	private SelectionPanel mView;
    	private Main mApp;
    	public SelectionListener (SelectionPanel view, Main app)
    	{
    		mView = view;
    		mApp = app;
    	}
    	public void actionPerformed(ActionEvent arg0) {
    		// FOR THE MOMENT WE DO LIKE THAT BUT IT IS PROVISORY
    		String  textButton=((JButton) arg0.getSource()).getText();	
    		if(textButton == "Affichage"){
    			mApp.onSetActivity(mApp.onGetActivity(textButton));
    			System.out.println("Ouverture de l'activité affichage");
    		}
    	}
     
    }
    Les fonctions bindés dans le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	public void onSetActivity(JPanel activity)
    	{
    		frame.setActivity(activity);
    	}
     
    	public JPanel onGetActivity(String activityName)
    	{
    		return frame.getActivity(activityName);
    	}
    Les fonctions du frame :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	//Set the panel (activity) which will be on screen
    	public void setActivity(JPanel wantedActivity){
    		this.setContentPane(wantedActivity);
    	}
     
     
    	public JPanel getActivity(String activityName)
    	{
    		if(activityName == "Affichage"){
    			return mDisplayPanel;
    		}
    		return mSelectionPanel;
    	}
    L'activité (activity) correspond au panel qui sera affiché.

    Voilà, je pense que vous avez tous les éléments pour régler l'affaire.
    Ca se trouve je fais n'importe quoi mais j'avais plutôt l'impression que ce que je fais est censé... En même temps j'ai pas une grande expérience du Java.

    Merci de votre aide,

    A+
    dede

  2. #2
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour,

    J'ai trouvé mais c'était pas facile. En fait, le problème vient du constructeur de la classe SelectionPanel : tu as l'argument app, tu ne t'en sers pas. Moralité, la variable mApp reste non initialisée, donc égale à null, et lorsque tu construis ton SelectionListener, tu passes une variable null comme deuxième argument.
    Forcément, ton SelectionListener ne fait pas de test, et appelle des fonctions sur sa variable mApp qui est null, d'où la NullPointerException.

    Voilà.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre éprouvé
    Avatar de n!co
    Profil pro
    Inscrit en
    Février 2004
    Messages
    831
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 831
    Points : 936
    Points
    936
    Par défaut
    Dans ta classe SelectionPanel, ton constructeur recoit une variable app de type Main que tu n'utilise pas pour initialiser ta variable de class mApp. La référence passé à SelectionListener est donc null

    Edit : pas assez rapide
    Netbeans account : nico@share.java.net
    Merci de ne pas poser de questions techniques par MP

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 76
    Points
    76
    Par défaut
    Mince alors quel bougre!!!
    Bah merci pour vos réponses (rapides!!) je testerai ça dès que je peux mais je pense que ça viens bien de là.
    Moi qui croyait avoir tout instancié...
    Je suppose que ça signifie que je n'ai pas besoin de binder les fonctions de ma frame a mon main et de direct utilisé appeler les fonctions sur le frame?
    Merci beaucoup

    A+
    dede

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

Discussions similaires

  1. [Swing]Changer la couleur du curseur
    Par LordBlaize dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 20/02/2006, 17h52
  2. [SWING]changer le background d'un JButton
    Par david06600 dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 18/02/2006, 21h49
  3. [ Swing ] Ajout de Container dans un autre Container
    Par Invité dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 16/02/2006, 15h57
  4. [Swing] Changer le contenu d'un Container via un menu
    Par TheSeb dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 07/12/2004, 23h07
  5. [Swing]changer l'icone du hotjava
    Par juflata dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 11/08/2004, 15h08

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