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 :

Possibilité d'ajouter un JPanel dans "addActionListener"


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club Avatar de botLIA
    Homme Profil pro
    Étudiant en Licence 3 CDA
    Inscrit en
    Juin 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant en Licence 3 CDA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 45
    Points : 29
    Points
    29
    Par défaut Possibilité d'ajouter un JPanel dans "addActionListener"
    Bonjour,

    Je fait un programme en Java Swing, j'ai programmer une Frame qui se nomme "Fenetre", dans cette fenêtre j'ai créer un menu avec JMenu "Éditer" par exemple, puis j'ai ajouter des Item à mes menus avec JMenuItem exemple : JMenuItem retirer = new JMenuItem("retirer");

    Dans une autre class nommée "Supprimer", ce trouve un Panel : public Supprimer(){} .

    Est-ce possible que quand je clique sur le sous menu "retirer", il ajoute le Panel dans la fenêtre pour voir les objets de ce Panel ?

    J'ai essayer en écrivant "this.add(retirer());", "Fenetre.add(retirer());", "this.getContentPane(retirer())"... mais je me retrouve avec une erreur à chaque fois, est-ce possible ou non ?

    Merci d'avance

  2. #2
    Nouveau membre du Club Avatar de botLIA
    Homme Profil pro
    Étudiant en Licence 3 CDA
    Inscrit en
    Juin 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant en Licence 3 CDA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 45
    Points : 29
    Points
    29
    Par défaut Possibilité d'ajouter un JPanel dans "addActionListener"
    J'ai pas fait attention quand je rédigeais mon message, c'était :

    - "this.add(new retirer());"
    - "Fenetre.add(new retirer());"

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Dans la méthode actionPerformed() de l'ActionListener, this représente l'instance d'ActionListener, donc this.add(retirer()) ne peut compiler que si la méthode add existe dans l'implémentation de l'ActionListener, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    new ActionListener() {
     
        @Override
        public void actionPerformed(ActionEvent arg0) {
              this.add(new JPanel()); 
        }
     
        private void add(JPanel panel) {
    	  /* ... faire quelque chose ici ... */
        }
     
    }
    Idem pour this.getContentPane(retirer());Quant à Fenetre.add(retirer());, cela suggère qu'il y ait une méthode statique dans la classe Fenetre : or, ajouter un JPanel à une instance de Fenetre ne se fera pas avec une méthode statique (sauf si tu stockes tes instances dans une variable statique), mais avec une méthode d'instance.

    Il y a un cas où le this représente l'instance de fenêtre, c'est quand on utilise une expression lambda pour l'ActionListener, et que celle-ci est créée dans une méthode d'instance de Fenetre, ou son constructeur :
    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
    public class Fenetre extends JFrame {
     
    	public Fenetre() {
    		JMenuBar menuBar = new JMenuBar();
    		menuBar.add(new JMenu("Menu"))
    		       .add(new JMenuItem("Ajouter"))
    		       .addActionListener(e-> this.add(new MyPanel())); // ici this, c'est bien l'instance de Fenetre
     
    		setJMenuBar(menuBar);
     
    		setSize(300, 300);
    		setLocationRelativeTo(null);
     
    	}
     
    	public static void main(String[] args) {
    		new Fenetre().setVisible(true);
    	}
     
    }
    Aussi, ce code ne compilerait, mais ne fonctionnerait pas : on ne verrait pas le JPanel MyPanel s'afficher, parce que la fenêtre étant déjà visible, le layout ne sera fait automatiquement à l'ajout d'un nouveau composant. Il faudra donc faire :

    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 Fenetre extends JFrame {
     
    	public Fenetre() {
    		JMenuBar menuBar = new JMenuBar();
    		menuBar.add(new JMenu("Menu"))
    		       .add(new JMenuItem("Ajouter"))
    		       .addActionListener(e-> this.addPanel(new MyPanel())); // ici this, c'est bien l'instance de Fenetre
     
    		setJMenuBar(menuBar);
     
    		setSize(300, 300);
    		setLocationRelativeTo(null);
     
    	}
     
            private void addPanel(JPanel panel) {
                  add(panel);
                  revalidate(); // pour relancer le layout au besoin
            }
     
    	public static void main(String[] args) {
    		new Fenetre().setVisible(true);
    	}
     
    }
    Par ailleurs, quand tu écris new retirer(), j'espère que tu ne fais pas référence à la variable retirer... parce que cette syntaxe suggère qu'il existe une classe qui s'appelle retirer. Si ta classe s'appelle Supprimer, alors c'est new Supprimer().

    Enfin, attention avec ce genre de techniques d'ajout de composants à la volée : attention aux composants qui se trouvent déjà dans la fenêtre, au layout du content pane.... tu risques d'avoir des difficultés à placer tout ça en même temps de manière satisfaisante. Si le but est d'afficher un dialogue pour saisir des options suite à l'action "retirer", utiliser plutôt un JOptionPane, ou un JDialog. Si le but est d'afficher alternativement des ensembles de composants en fonction des menus, plutôt envisager un CardLayout. Il y a plein d'autres moyens en fonction de ce que tu veux faire exactement : OverlayLayout, JLayer, ou peut-être simplement JPopupMenu.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Nouveau membre du Club Avatar de botLIA
    Homme Profil pro
    Étudiant en Licence 3 CDA
    Inscrit en
    Juin 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant en Licence 3 CDA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Je te remercie pour ta réponse, je vais travailler la dessus

    cordialement.

  5. #5
    Nouveau membre du Club Avatar de botLIA
    Homme Profil pro
    Étudiant en Licence 3 CDA
    Inscrit en
    Juin 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant en Licence 3 CDA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Nickel ca fonctionne, je te remercie

    Cordialement.

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

Discussions similaires

  1. ajouter une jpanel dans le bon emplacement dans une jframe
    Par jlassiramzy dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 31/07/2006, 17h37
  2. Ajout de JPanel dans un JFrame
    Par Invité dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 13/04/2006, 12h22

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