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

Interfaces Graphiques en Java Discussion :

Menu et Items Events


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 26
    Par défaut Menu et Items Events
    Bonjour,

    Je suis en train de développer une application et j'ai un problème.

    Je voudrai que l'utilisateur puisse choisir le look and feel qu'il souhaite.

    Pour cela j'ai créer un menu auquel j'ajoute la liste des look and feel existant.

    Le menu se rempli alors des différents look and feel...

    Cependant j'aimerai que lorsque l'on clique sur un des look and feel du menu, j'arrive à récupérer son nom de façon à effecteur le traitement pour afficher le look and feel.

    Problème : Dès le lancement de l'exécution on ne connait pas les looks and feel, c'est l'application qui cherche ceux qui existe et les ajoute automatiquement dans le menu.

    Un peu de code pour mieux comprendre ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    private javax.swing.JMenu menuThemes;
     
    private void menuThemesMouseMoved(java.awt.event.MouseEvent evt) {
     
     UIManager.LookAndFeelInfo[] info = UIManager.getInstalledLookAndFeels(); 
       for(int i=0; i<info.length;i++){
          String nomLF = info[i].getName();
          menuThemes.add(nomLF);
    }
    }
    Merci d'avance de votre aide.

  2. #2
    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
    Au lieu d'ajouter juste le nom dans ta JComboBox, ajoute chaque objet LookAndFeelInfo. puis écris un renderer pour ta JComboBox qui n'affiche que le le nom du L&F.

    De cette façon tu auras juste le nom du L&F qui s'afficher, mais en faisant un getSelectedItem tu récupèreras bien un objet de classe LookAndFeelInfo, donc tu auras accès à la méthode getClass et donc par extension ce qu'il faut pour manipuler l'UIManager.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 26
    Par défaut
    Merci de ta réponse

    Aurais tu un exemple ?

    Je parle bien d'un menu et non d'une jcombobox, je sais le faire avec.

    Mais il n'y a pas de fonction "getSelectedIndex()" pour le JMenu ...

  4. #4
    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
    My bad, j'ai cru que tu utilisais une JComboBox.

    Pour les menus le plus simple est de créer une classe héritant d'AbstractAction a qui l'on passe en paramètre un LookAndFeelInfo.

    En effet, tu peux ajouter directement une AbstractAction à un JMenu sans passer par un JMenuItem, l'item sera créé automatiquement (ça marche aussi pour les JToolbar)

    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 LFAction extends AbstractAction {
     
        private LookAndFeelInfo info;
     
        public LFAction(LookAndFeelInfo info) {
            super(info.getName());
            this.info = info;        
        }
        @Override
        public void actionPerformed( ActionEvent e) {
            try {
                UIManager.setLookAndFeel(info.getClassName());
            } catch (...) {
                //...
            }
        }
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 26
    Par défaut
    D'accord ...

    Cependant, dans ton cas comment considères-tu que l'utilisateur puisse choisir le look and feel ?

    Mon but ne va pas chercher loin. J'ai un menu. J'ajoute dans ce menu le nom des différents look and feel (un par ligne) lorsque l'utilisateur passe la souris sur le menu.

    Moi ce que je souhaite, c'est tout simplement récupérer c'est le nom du look and feel cliqué par l'utilsateur...

    La suite je sais comment faire.

  6. #6
    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
    Le code suivant suffira amplement pour créer ton menu et que le clic sur chaque entrée effectue le changement de L&F (à partir du moment ou tu te base sur le Système d'actions dont je te parle dans mon précédent post).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    JMenu menuThemes= new JMenu("Themes");
    UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();
    for(LookAndFeelInfo info : infos ) {
        menuThemes.add(new LFAction(info)); 
    }
    C'est une solution bien plus propre et simple que celle que tu cherches à mettre en place

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 26
    Par défaut
    Merci seulement quand je clique sur un des thèmes, rien ne se passe ou alors il y a une exception de type null pointer exception ...

  8. #8
    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
    Il manque probablement un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SwingUtilities.updateComponentTreeUI(maJFrame);
    genre

    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
    64
    65
    66
    67
    68
    69
    package lf;
     
    import java.awt.event.ActionEvent;
     
    import javax.swing.AbstractAction;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    import javax.swing.UIManager.LookAndFeelInfo;
     
    public class LFAction extends AbstractAction {
     
        private LookAndFeelInfo info;
        private JFrame mainFrame;
     
        public LFAction(LookAndFeelInfo info, JFrame mainFrame) {
            super(info.getName());
            this.info = info;
            this.mainFrame = mainFrame;
        }
     
        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                UIManager.setLookAndFeel(info.getClassName());
                SwingUtilities.updateComponentTreeUI(mainFrame);
                mainFrame.pack();
            } catch (ClassNotFoundException e1) {
                // TODO Bloc catch auto-généré
                e1.printStackTrace();
            } catch (InstantiationException e1) {
                // TODO Bloc catch auto-généré
                e1.printStackTrace();
            } catch (IllegalAccessException e1) {
                // TODO Bloc catch auto-généré
                e1.printStackTrace();
            } catch (UnsupportedLookAndFeelException e1) {
                // TODO Bloc catch auto-généré
                e1.printStackTrace();
            }
        }
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            JFrame f = new JFrame();
            JMenu menuThemes= new JMenu("Themes");
            UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();
            for(LookAndFeelInfo info : infos ) {
                menuThemes.add(new LFAction(info,f)); 
            }
     
            JMenuBar b = new JMenuBar();
            b.add(menuThemes);
            f.setJMenuBar(b);
            f.add(new JButton("O Hai"));
            f.pack();
            f.setLocationRelativeTo(null);
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f.setVisible(true);        
     
        }
     
    }

Discussions similaires

  1. Menu déroulant et event
    Par skwi6 dans le forum jQuery
    Réponses: 2
    Dernier message: 21/03/2011, 11h36
  2. intercepter l'event .click d'un context menu item
    Par zebrette dans le forum VB.NET
    Réponses: 2
    Dernier message: 20/01/2011, 17h46
  3. Editer le lien du menu "Edit Item"
    Par lesanglier dans le forum Configuration
    Réponses: 0
    Dernier message: 06/10/2009, 10h40
  4. Editer le lien du menu "Edit Item"
    Par lesanglier dans le forum SharePoint
    Réponses: 0
    Dernier message: 06/10/2009, 10h40
  5. Menu déroulant & Items
    Par stef_nancy dans le forum Débuter
    Réponses: 2
    Dernier message: 06/07/2009, 15h31

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