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

Agents de placement/Fenêtres Java Discussion :

Questions avec les menus


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut Questions avec les menus
    bonsoir,

    Je viens d'ajouter un menu à une application, c'est bien beau ca marche mais j'ai quelques questions quand meme :

    1. mon code est il bon, ou y a t il une meilleure manière de faire ?

    code :
    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
    //Création de la barre de menu
    		menuBar = new JMenuBar();
     
    		//Création premier menu : "Partie"
    		menu = new JMenu("Partie");
     
    		menuItem = new JMenuItem("Commencer la parttie");
    		menu.add(menuItem);
     
    		menuItem = new JMenuItem("menu...");
    		menu.add(menuItem);
     
    		menu.addSeparator();
    		menuItem = new JMenuItem("Quitter");
    		menu.add(menuItem);
     
    		menuBar.add(menu);
     
    		//Création second menu : "level"
    		menu = new JMenu("Niveau");
    		ButtonGroup group2 = new ButtonGroup();
     
    		rbMenuItem = new JRadioButtonMenuItem("Niveau 1");
    		group2.add(rbMenuItem);
    		menu.add(rbMenuItem);
     
    		rbMenuItem = new JRadioButtonMenuItem("Niveau 3");
    		group2.add(rbMenuItem);
    		menu.add(rbMenuItem);
     
    		rbMenuItem = new JRadioButtonMenuItem("Niveau 3");
    		group2.add(rbMenuItem);
    		menu.add(rbMenuItem);
     
    		menuBar.add(menu);
    2. Maintenant que j'ai un joli menu en haut, comment est ce que je fais pour que ca change quelque chose quand l'utilisateur clique sur des éléments ? Par exemple, j'ai le menu level et j'aimerais qu'en cliquand sur les différents niveaux, la variable level change ou alors pour le bouton quitter, quand je clique dessus qu'il me fasse un System.exit(0);

    3. J'avais vu sur un item de menu C'était marqué par exemple Commencer partie et ensuite F3 en tout petit à droite. Comment puis je faire cela ?

    4. Si je veut faire un menu ? qui affiche une fenetre d'aide, il y a quelque chose de déja fait en java pour cela, ou alors je dois appeler une JFrame dans laquelle j'écris l'aide ?

    5. Merci Beaucoup de vos réponses

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 851
    Points
    22 851
    Billets dans le blog
    51
    Par défaut
    1. mon code est il bon, ou y a t il une meilleure manière de faire ?
    Oui ton code est bon
    Oui il y a mieux : tu pourrait te definir des Action (voir la classe AbstractAction). Une action permet a partir d'un meme objet unique de creer :
    - des menu item pour les menu et les popup.
    - des boutons pour les tool bar.
    - des boutons pour mettre dans le panel de la GUI.

    Au choix :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    myMenu.add(myAction);
    myToolBar.add(myAction);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    JMenuItem myItem = new JMenuItem(myAction);
    myMenu.add(myAction);
    JButton myButton = new JButton(myAction);
    myToolBar.add(myButton);
    En plus l'action centralise le texte, l'icone, l'infobulle, le mnemonic (touche rapide) et l'accelerator (touches raccourcies). Si on rend une action disabled, alors tous les boutons et autres items crees a partir de cette meme action sont automatiquement disabled...

    Note : cette classe, deja fort utile, sera etendu dans Java 6 pour mieux fonctionner avec les bouton a etat (radio, check, toggle). Pour les version pre-6 on peut y arriver facilement en bidouillant un peu. Elle gerera aussi des icones de taille differente.

    2. Maintenant que j'ai un joli menu en haut, comment est ce que je fais pour que ca change quelque chose quand l'utilisateur clique sur des éléments ?
    En mettant des ActionListener sur chaque item. La encore la classe AbstractAction te facilite grandement la tache puisqu'elle etend deja cette interface et donc une action devient le ActionListener par defaut de tous les boutons et items crees a partir d'elle.

    3. J'avais vu sur un item de menu C'était marqué par exemple Commencer partie et ensuite F3 en tout petit à droite
    En mettant un KeyStroke sur ton item, ton bouton ou ton action.

    4. Si je veut faire un menu ?
    Il existe l'extension JavaHelp disponible chez Sun qui permet de faire cela. Cela permet, entre autre, de :
    - avoir une aide localisee.
    - afficher de l'aide comme dans Windows.
    - configurer le mode d'affichage de l'aide suivant l'usage (fenetre d'aide vs. simple popup pour l'aide contextuelle).
    - disposer d'un moteur de recherche (optionnel).
    - disposer d'un index (optionnel).
    - disposer de favoris (optionnel).
    - creer un bouton/action "Qu'est ce que c'est ?" qui lance automatiquement la rebrique associeee a un composant (aide contextuelle).
    - creer un bouton/action "Aide" qui lance la rubrique general.
    Sinon ce n'est pas tres complique de mettre une page HTML dans un JEditorPane affiche dans une JFrame.

    5. Merci Beaucoup de vos réponses
    De rien!
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Merci c'est gentil

    J'ai encore une autre question, si je veut faire des action je peut procéder de la manière suivante ? :
    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
    //Création second menu : "level" 
          menu = new JMenu("Niveau"); 
          ButtonGroup group2 = new ButtonGroup(); 
     
          rbMenuItem = new JRadioButtonMenuItem("Niveau 1"); 
          rbMenuItem.setCommand("level 1");    
          rbMenuItem.addActionListener(rbMenuItem);
          group2.add(rbMenuItem); 
          menu.add(rbMenuItem); 
     
          rbMenuItem = new JRadioButtonMenuItem("Niveau 2");
          rbMenuItem.setCommand("level 2");    
          rbMenuItem.addActionListener(rbMenuItem);
          group2.add(rbMenuItem); 
          menu.add(rbMenuItem); 
     
          rbMenuItem = new JRadioButtonMenuItem("Niveau 3");
          rbMenuItem.setCommand("level 3");      
          rbMenuItem.addActionListener(rbMenuItem);
          group2.add(rbMenuItem); 
          menu.add(rbMenuItem); 
     
          menuBar.add(menu);
    ??

    et ensuite je dois faire un actionPerformed pour prendre tout ca ?

    et je met ou dans mon code ma construction de menu ?
    mon actionPerformed ?

    Merci

  4. #4
    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,
    La construction du menu doit se faire en meme temps que la construction de la fenetre qui le contient.

    Concernant la méthode action performed, il faut reprendre un peu.
    Il te faut une classe qui implémente ActionListener (par exemple ta fenetre), ou une classe à part qui hérite de AbstractAction ou de ActionAdapter. Dans cette classe, tu écris une méthode public void actionPerformed(ActionEvent e) { ... }.
    Tu crées une instance de cette classe, et tu la mets en paramètre des appels de addActionListener(ActionListener l). Ce sera l'objet que tu donnes en paramètre qui traitera les clics à travers sa méthode actionPerformed. Il est possible de traiter des clics sur des boutons différents avec le meme objet, car la classe ActionEvent offre les méthodes getSource() et getActionCommand() qui te permettent de savoir sur quel bouton l'utilisateur a cliqué.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public class Test extends JFrame implements ActionListener {
     
      JButton b;
      JLabel l;
     
      public Test() {
        super("Entrainement au clic");
        b = new JButton("cliquez ici");
        b.addActionListener(this);   //C'est la JFrame elle meme qui va traiter les clics sur le bouton.
    // Ca pourrait etre un autre objet d'une autre classe.
        this.getContentPane().add(b);
        this.pack();
        this.show();
      }
     
      public void actionPerformed(ActionEvent e) {
     
        if(e.getSource().equals(b)) {  //inutile ici puisqu'on écoute qu'un seul bouton
          this.getContentPane().remove(b);
          l = new JLabel("Bravo !");
          this.getContentPane().add(l);
          this.pack();
          this.show();
        }
      }
     
    }
    "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.

  5. #5
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Merci de tous ces éclaircissements

    Je vous dis ce soir si j'ai réussi ou si j'ai encore des questions

  6. #6
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Merci beaucoup ca marche parfaitement bien

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 851
    Points
    22 851
    Billets dans le blog
    51
    Par défaut
    Il te faut une classe qui implémente ActionListener (par exemple ta fenetre), ou une classe à part qui hérite de AbstractAction ou de ActionAdapter. Dans cette classe, tu écris une méthode public void actionPerformed(ActionEvent e) { ... }.
    Tu crées une instance de cette classe, et tu la mets en paramètre des appels de addActionListener(ActionListener l).
    Oui quand tu utilises ton propre ActionListener.
    Non quand tu utilises des Action, en effet le mécanisme qui créer un bouton à partir d'une action fait ca directement.

    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
     
    public void MyAction extendeds AbstractionAction {
      /** Creates a new instance.
      */
      public MyAction() {
        // Correspond a un putValue sur  NAME et SMALL_ICON.
        super("Cliquer ici pour faire qq chose", new ImageIcon("toto.png"));
        putValue(SHORT_DESCRIPTION, "Ceci est une info-bule");
        putValue(MNEMONIC_KEY, new Character('C');
        putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("control F2");
      }
     
      /** @inheritDoc
      */
      public void actionPerformed(ActionEvent event) {
        // On fait qq chose ici.
       ...
      }
    }
    Et ensuite on fait comme indiqué précédement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Action myAction = new MyAction();
    myMenu.add(myAction); 
    myToolBar.add(myAction); 
     
    ....
     
    myAction.setEnabled(estIlPossibleDeFaireMyActionPourLeMoment);
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. Questions avec les sockets et routeurs
    Par Nico128 dans le forum WinDev
    Réponses: 2
    Dernier message: 28/01/2008, 18h58
  2. problème avec les menus
    Par samsso2006 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 22/12/2006, 10h21
  3. Gestion des fenêtres avec les menus
    Par Death83 dans le forum C++Builder
    Réponses: 23
    Dernier message: 15/12/2006, 10h22
  4. Question sur les Menus contextuel ?
    Par evlp2004@hotmail.com dans le forum Access
    Réponses: 2
    Dernier message: 09/02/2006, 13h40
  5. Pb avec les menus
    Par Ph. B. dans le forum XMLRAD
    Réponses: 6
    Dernier message: 29/01/2003, 11h57

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