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 :

Pourquoi le menu ne s'affiche pas ?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut Pourquoi le menu ne s'affiche pas ?
    Bonjour tout le monde,

    Je me suis un peu remis au java pour tenter de faire une petite application et je bute sur un point.

    J'affiche une fenêtre au travers d'une classe et maintenant j'essaie de lui mettre dedans un menu. Helas, pas de menu visible...

    Je pense que je doit mal faire quelque-chose. Se peut-il que ça vienne du fait que j'affiche ma fenêtre puis queje tente d'ajouter par la suite les éléments qui vont dedans ?

    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
    28
    29
    30
     
    import tools.fenetre;
    import javax.swing.*;
     
    public class Window {
     
        public static void main(String args[]) {
     
            //Créer une fenêtre
            fenetre f = new fenetre();
     
            //Créer une barre de menu
            JMenuBar barreMenu = new JMenuBar();
     
            //Créer un menu
            JMenu menu1 = new JMenu();
            JMenu menu2 = new JMenu();
     
            //Nommer le menu
            menu1.setText("Test");
            barreMenu.add(menu1);
     
            //Nommer le menu
            menu2.setText("Essai");
            barreMenu.add(menu2);
     
            //Activer le menu
            f.setJMenuBar(barreMenu);
        }
    }
    puis:
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    package tools;
     
    import javax.swing.*;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowAdapter;
     
    public final class fenetre extends JFrame {
     
        /**
         * Champs de la classe Fenetre
         * 
         * x -> point x
         * y -> point y
         * tL -> Taille Largeur
         * tH -> Taille Hauteur
         */
        int x, y, tL, tH;
        String title;
     
        /**
         * Constructeur de la classe fenêtre
         * 
         * Proposera l'initialisation de la fenêtre et de ses composantes
         */
        public fenetre() {
     
            //Initialisation des variables
            this.x = 0;
            this.y = 0;
            this.tL = 800;
            this.tH = 600;
     
            this.title = "Pointage d'heure.";
     
            //Lance la création de la fenêtre
            createFen();
        }
     
        /**
         * Création de la fenêtre avec les paramètres d'initialisation
         */
        public void createFen () {
     
            JFrame w = new JFrame();
                w.setBounds(this.x, this.y, this.tL, this.tH);
                w.setTitle(this.title);
                w.setVisible(true);
     
     
                w.addWindowListener(
     
                    new WindowAdapter() {
     
                        @Override
                        public void windowClosing(WindowEvent e) {
     
                            System.exit(0);
                        }
                    }
                );
        }
    }
    J'oubliais. J'ai basé mon code sur des exemples diponible sur le net. Ce n'est peut être pas les bons !

    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Oui, ton intuition était bonne, c'est bien ça.

    Quand tu crées une interface, la dernière chose est de la rendre visible (... de faire un repaint), et est généralement précédé d'un appel à pack, histoire d'être tranquille niveau UI et de ne pas avoir d'espace en trop ou pas assez d'espace.
    Donc, enlever le setVisible(true) dans createFen() et le mettre en f.setVisible(true) à la fin de ton main.
    Aussi, tu as une petite erreur dans ta méthode createFen(). Ta variable locale w ne sers à rien, enlève la et laisse les méthodes travailler sur la classe elle-même et tu devrais arriver au résultat que tu veux.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Effectivement, si je met le setVisible(); a la fin du main ça résoud le problème.

    Du coup, j'ai tenté de retirer la variable w. Hélas sans succès et cela m'amène à un nouveau problème. Le listener ne fonctionne plus avec le w (donc la je crois que tu a parfaitement raison) et la taille / position n'est pus transmise certainement pour les mêmes raisons qu'évoqué au dessus.

    Peux-tu m'en dire un peu plus sur la faute du w et comment remédié à ce problème là ?

    Merci.

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    En fait, cette variable est inutile.
    Ton objet fenêtre étends JFrame, donc, quand tu crées une "fenêtre", tu crées une JFrame.
    Dans ta méthode createFen(), tu crées une autre JFrame locale, que tu stockes dans la variable w, et qui est ensuite inutilisée vis-a-vis de ton programme et est détruite à la fin de la méthode (variable locale).
    Ta variable w fait doublon à ton objet fenêtre, puisque tu crée une JFrame dans une JFrame.
    Supprime simplement w en appliquant les méthodes que tu appliquais à cette variable sur ton objet en lui-même :
    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 void createFen () {
     
                // tu appelles ces méthodes sur ton objet fenetre directement (this implicite)
                setBounds(this.x, this.y, this.tL, this.tH);
                setTitle(this.title);
     
                // tu ajoutes le listener sur ton objet fenetre
                addWindowListener(
     
                    new WindowAdapter() {
     
                        @Override
                        public void windowClosing(WindowEvent e) {
     
                            System.exit(0);
                        }
                    }
                );
        }
    J'espère que ça t'aide, j'ai l'impression de ne pas vraiment expliquer :/
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #5
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Bonjour,

    Tout d'abord merci pour le coup de pouce.

    Effectivement ! Bien vue !

    Je croyais pas que du fait de l'extends on pouvais travaillé directement comme si on était avec un this. Erreur d'appréciation, de compréhension de l'utilisation de la fonction extends.

    Ceci m'amène alors à considérer la chose suivante.

    Si je fait une classe sans extends, je suis obligé de définir un truc n = new truc() avec un n.methode() alors que si je fais une classe avec extends de truc alors methode() seul est disponible au travers du this sur l'ensemble de la classe.

    Maintenant j'ai compris.

    Bon prochaine étape, crée un menu déroulant d'une suite de boutons ressemblant à un menu de bouton. Les boutons devant être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    *Fichier
    **Enregistrer sous
    **Ouvrir
    *Profil
    **Lister
    **Créer
    *Pointage
    **Lister
    *BDD
    **Démarrer le serveur
    **Éteindre le serveur
    **Configurer la base
    Tous les logiciels ou presque ont ce type de menu. Ce qui est important c'est que le nombre de sous-menu peut varié. Comment l'implémenté et surtout comment ensuite faire pour que chaque action puisse lancer son action ? Refaire un listener ?

    Merci une nouvelle fois de votre aide.

  6. #6
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Pour créer des sous menus, ce sont des JMenuItem qu'il faut utiliser.

    Par exemple :
    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
     
     
    JMenu menu = new JMenu("Fichier");
    menu.setMnemonic(KeyEvent.VK_F); // met un accélérateur sur le menu (ctrl+f ici en l'occurence)
     
    JMenuItem enregistrer = new JMenuItem("Enregistrer");
    enregister.setMmnemonic(KeyStroke.getKeyStroke("control s")); // met un accélérateur pour sauvegarder (control + s)
     
    enregister.addActionListener(new ActionListener()
    @Override
    public void actionPerforme(actionEvent ae)
    {
    // ce que "enregistrer" doit réaliser
    });
     
    menu.add(enregistrer);
    Si tu veux rajouter un séparateur dans ton menu, il suffit de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    menu.add(new JSeparator());
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

Discussions similaires

  1. Pourquoi ce code ne m'affiche pas la bonne valeur ?
    Par Mr. X dans le forum Débuter
    Réponses: 20
    Dernier message: 19/09/2008, 10h48
  2. BUG: Menu ne s'affiche pas sur 2nd ecran
    Par wxcnbv dans le forum Forms
    Réponses: 2
    Dernier message: 30/01/2008, 10h19
  3. pourquoi mes coordonnées ne s'affichent pas à l'ecran?
    Par christianf dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 21/09/2007, 11h45
  4. [Outils][Crystal Report] Pourquoi mes icones ne s'affichent pas ?
    Par tonynho dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 12/05/2006, 16h29

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