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 :

Affecter un événement à un élément de menu


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut Affecter un événement à un élément de menu
    Bonjour,

    J'ai une classe qui dérive d'un JFrame, je crée un menu, et je voudrais affecter une action à élément du menu (affichage d'un objet dans le container de la Frame) :

    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
    public class MainWindow extends JFrame{
     
        // constructeur
        public MainWindow() {
     
            // on récupère le conteneur de la fenêtre
            final Container conteneur = this.getContentPane();
            conteneur.setLayout(new FlowLayout());
     
            // le menu
            JMenuBar mb = new JMenuBar();
            this.setJMenuBar(mb);
         ......
            JMenu menu2 = new JMenu();
            menu2.setText("Outils");
            mb.add(menu2);
            JMenuItem mi21 = new JMenuItem();
            mi21.setText("Préparer une mission");
            menu2.add(mi21);        
            ActionListener action21 = new ActionListener() {
                public void actionPerformed(ActionEvent e) {                
                    InterfacePrepaMission pm = new InterfacePrepaMission("Préparation de mission");
                    conteneur.add(pm, BorderLayout.NORTH);
                }
            };
            mi21.addActionListener(action21);
    .....
    Mais quand je clique sur le menu, rien ne s'affiche, pourquoi ?
    si je fais afficher l'objet directement à l'affichage de la frame et pas en réponse à la sélection dans le menu, il s'affiche bien.

    Merci,

    Nico

  2. #2
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Il est possible que cela soit un problème de rafraichissement.

    Tu peux essayer de faire un appel à la méthode repaint() du conteneur après y avoir ajouté l'élément.

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Lorsqu'on modifie un conteneur déjà visible, il faut le forcer à recalculer son layout, via la méthode revalidate() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    conteneur.add(pm, BorderLayout.NORTH);
    conteneur.revalidate();
    a++

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut
    OK merci, ça marche avec conteneur.validate() (revalidate() n'existe pas apparemment).

    nico

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    revalidate existe pour les composant héritant de JComponent.
    Or une JFrame n'hérite pas de JComponent, donc pas de méthode revalidate pour la JFrame.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/02/2010, 18h41
  2. Réponses: 0
    Dernier message: 02/07/2009, 17h00
  3. comment laisser actif un élément de menu
    Par fomazou dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 04/06/2007, 18h15
  4. Impossible d'affecter un événement
    Par Costello dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/08/2005, 16h18
  5. Réponses: 4
    Dernier message: 16/04/2005, 16h54

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