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 :

Debutant -> Pb d'utilisation instanciation de JPanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 26
    Par défaut Debutant -> Pb d'utilisation instanciation de JPanel
    Bonjour ,

    A nouveau un petit soucis de debutant ....je cherche a creer 2 fenetres tout simples avec un bouton ...

    Je declare une classe SimpleFrame heritant de la classe JFrame , et dans cette classe j'instancie une classe Contenu heritant de la classe JPanel , et definissant certaines caracteristique de la fenetre, dont le bouton de type JButton ....

    Ca donne ca :
    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
    public class SimpleFrame extends JFrame {
     
     
    	//constructeur de simpleFrame
    	public SimpleFrame () {
    		System.out.println("Constructeur de la fenetre 1 !");
    		this.setTitle("Vous etes sur la 1ere fenetre !");
     
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
     
    		this.setSize(300,100);
    		this.setVisible(true);
    		Contenu MonContenu = new Contenu(this);
    		//afin que le contenu detaillé dans l'objet contenu, sopit positionné ds la fenetre , 
    		// on utilise l'objet container
    		Container LeContenant = getContentPane();
    		LeContenant.add(MonContenu);
    	}

    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
    public class Contenu extends JPanel {
     
    	private SimpleFrame MaFenetre = null;
    	private MaSecondeFenetre MaSecondeFenetre = null;
     
    	//1er constructeur du contenu avec la 1ere fenetre
    	public Contenu (SimpleFrame UneFenetre){
    		//constructeur du contenu récupérant les proprietes et methodes de la fenetre
    		System.out.println("Constructeur du conteneur de la fenetre 1 !");
    		setLayout(new FlowLayout());
     
    		this.MaFenetre = UneFenetre ;
    		JButton MonBouton = new JButton("Panique");
    		MaFenetre.add(MonBouton);
    		System.out.println("Le bouton de la fenetre 1 est cree !");
    		MonBouton.addActionListener(new MonReceveur());
    	}

    En lancant le code , j'obtiens bien une fenetre, mais le bouton n'apparait pas dedans !? ... j'ai essaye d'utiliser plutot un BorderLayout a la place du FlowLayout , et j'ai essaye de positionner le bouton a differents endroits (SOUTH, CENTER, etc ..) ..sans succes !?

    Si vous pouvez me dire ce qui cloche, ca serait sympa ...

    merci d'avance

  2. #2
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 26
    Par défaut
    Petite précision, je viens de m'apercevoir qu'en redimensionnant la fenetre (ne contenant pas de bouton), le bouton apparaissait alors dans la dite fenetre .... bizarre non ?!

    Bon donc en passant outre ce bizarre comportement du bouton ...je souhaite a partir du clic bouton , faire apparaitre une seconde fenetre tout en effacant la premiere . Cette seconde fenetre contient elle aussi un simple bouton qui permet de reven,ir sur la premiere qd on clique dessus ...en gros je veux swapper entre ces 2 fenetre par clic sur le bouton de chacune d'elle ....

    trivial en soit, mais il semble que je gere mal les evenements lies au clic bouton (vous allez dire que je cumule les probleems ou les gaffes , mais voila je vous donne tout en vrac en esperant que vous me depatouillez cela ) ....

    je gere le swap ainsi :

    Dans la classe Contenu je declare un receveur d'evenements comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class MonReceveur implements ActionListener {
    		public void actionPerformed (ActionEvent e) {
    			System.out.println("Clic recus !!");
    			//SimpleFrame.FermerFenetre();
    			 //Object MaClasse = e.getClass();
    			MaFenetre.FermerFenetre(MaFenetre);  
    			MaSecondeFenetre.OuvrirFenetre(MaSecondeFenetre);
    		}
    	}
    Et j'appelle donc 2 methodes ultra simple rattachées à chaque objet fenetre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	public void FermerFenetre (SimpleFrame fenetre) {
    		fenetre.setVisible(false);
     
    	}
     
    	public void OuvrirFenetre (SimpleFrame fenetre) {
    		fenetre.setVisible(true);
     
    	}

    Et donc en cliquant sur le bouton de la fenetre 1, je plante avec de multiples UnKnown Source ...

    Merci pour votre aide sur ces problemes ...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Par défaut
    Pour le premier probleme, as-tu essayé de mettre un FillLayout par exemple ?
    Sinon tu as ausi l'option de mettre un gridLayout, de créer des GridData et d'appliquer le GridData à ton bouton .. tu vois ce que je veux dire ou je ne suis pas clair ?

    peut etre qu'un peu de code serait plus explicite ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    GridData gridData = new GridData();
    gridData.verticalAlignment = GridData.CENTER;
    gridData.horizontalAlignment = GridData.CENTER;
     
    GridLayout layout = new GridLayout();
    maFenetre.setLayout(layout);
     
    JButton MonBouton = new JButton("Panique");
    MonBouton.setLayoutData(gridData);
    ca ne reste qu'un exemple non testé .. donc je ne garantis pas que ca fonctionne .. mais moi c'est toujours comme cela que je fais et ca marche bien !


    Pour le deuxième probleme, est-ce que tu peux mettre la ou les Exceptions ?

  4. #4
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 26
    Par défaut
    merci pour ton tuyau ...je vais essayer ca pour voir ce que ca donne , par contre je ne trouve pas le package d'importation pour le GridData ??

  5. #5
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 26
    Par défaut
    POur l'exception ds le second probleme (clic bouton) voici ce que j'ai :

    Clic recus !!
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Contenu.OuvrirFenetre(Contenu.java:68)
    at Contenu$MonReceveurAction.actionPerformed(Contenu.java:77)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Par défaut
    nullpointer => ta fenetre n'est pas initialisée .. donc tu ne peux pas faire de setVisible .. Il faut que tu l'ouvres dans un premier temps et ensuite tu peux agir dessus ..

Discussions similaires

  1. [NetBeans] utilisation d'un jpanel fait maison
    Par jmi dans le forum NetBeans
    Réponses: 2
    Dernier message: 03/05/2006, 08h13
  2. [Language][débutant] "transient" où l'utiliser?
    Par rabobsky dans le forum Langage
    Réponses: 7
    Dernier message: 16/08/2005, 12h05
  3. [debutant] problème avec type à utiliser
    Par mlequim dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 15/07/2005, 16h08
  4. [Maven][Debutant]Specifier jar a utiliser
    Par royto dans le forum Maven
    Réponses: 1
    Dernier message: 06/07/2005, 10h46
  5. [Debutant(e)]Quel composant utiliser pour faire une grille
    Par elitost dans le forum Composants
    Réponses: 7
    Dernier message: 21/06/2004, 20h44

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