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 :

JPopupMenu sur un JMenu


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre confirmé Avatar de Jose.N70
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut JPopupMenu sur un JMenu
    Bonsoir, je me tourne vers vous afin de trouver une solution à un problème que voici :

    Sur mon application je possède un JMenu ( dynamique ) sur lequel je souhaite ajouter un menu contextuel ( un JPopupMenu en soit ).

    Le menu contextuel apparait lors d'un clic droit sur le JMenu, sauf que lorsque je place mon curseur sur l'une des options de menu contextuel, le composant JPopupMenu se ferme.

    Auriez vous une idée ?

    --------

    Pour afficher le JPopuMenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    if (SwingUtilities.isRightMouseButton(e)){
    		JPopupMenu pop = new MenuContextuel();
    		pop.show(e.getComponent(),e.getX(), e.getY());
    }
    ...
    Pour le JPopupMenu, pour le moment j'ai simplement ajouté trois JMenuItem, sans aucune fonction

  2. #2
    Membre confirmé
    Avatar de baxou087
    Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mai 2010
    Messages : 49
    Par défaut
    Bonsoir,

    Le code que tu nous montres actuellement semble correct. Serait-il possible que tu nous montres le code de la classe MenuContextuel?

    Cordialement.
    baxou087

  3. #3
    Membre confirmé Avatar de Jose.N70
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut
    Simplement ca :

    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
     
    public class MenuContextuel extends JPopupMenu implements ActionListener{
     
    	public MenuContextuel_JMenu() {
    		JMenuItem menuItem;
    		menuItem = new JMenuItem("Ouvrir");
    		menuItem.setActionCommand("open");
    		menuItem.addActionListener(this);
    		add(menuItem);
    		menuItem = new JMenuItem("Ajouter un répertoire"); 
    		menuItem.setActionCommand("add");
    		menuItem.addActionListener(this);
    		add(menuItem);
    		menuItem = new JMenuItem("Supprimer");
    		menuItem.setActionCommand("delete");
    		menuItem.addActionListener(this);
    		add(menuItem);
    	}	
     
    	public void actionPerformed(ActionEvent e) {
               // à faire
    	}

  4. #4
    Membre confirmé Avatar de Jose.N70
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut
    Le fait de mettre ce type de composant sur un JMenu, qui lui même à un JPopupMenu ne pose t-il pas problème ?

  5. #5
    Membre confirmé Avatar de Jose.N70
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut
    J'avance enfin plus ou moins, le menu contextuel reste ouvert, mais c'est le JMenu qui se ferme ....

  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
    Un clic droit sur un menu?

    Crois tu vraiment que les utilisateurs vont penser à faire ça (on a appris au gent que les menus sont déroulants, et que le clic droit ne sert à rien dessus, en général il nes chercheront même pas à l'envisager).

    Que cherches tu vraiment à faire?

    Pourquoi ne pas plutôt ajouter ces options dans le menu ou un sous menu?

  7. #7
    Membre confirmé Avatar de Jose.N70
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut
    Citation Envoyé par sinok Voir le message
    Un clic droit sur un menu?

    Crois tu vraiment que les utilisateurs vont penser à faire ça (on a appris au gent que les menus sont déroulants, et que le clic droit ne sert à rien dessus, en général il nes chercheront même pas à l'envisager).

    Que cherches tu vraiment à faire?

    Pourquoi ne pas plutôt ajouter ces options dans le menu ou un sous menu?
    Bonjour, en fait je souhaite depuis mes menus pouvoir ajouter un menu / supprimer un menu / ou l'ouvrir ( les menus étant des dossiers et les menuItem des fichiers d'un répertoire listé ).

    Mes utilisateurs aiment assez ce système.

  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
    De façon simple, un bouton avec juste une icone de type new au début de la menuBar qui permet d'ajouter un nouveau menu.

    Puis dans chaque menu des option ouvrir et supprimer séparées du reste par un séparator?

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
     
    package menus;
     
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.swing.AbstractAction;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JOptionPane;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
     
    import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
     
    public class DynMenu {
     
        private JFrame f;
        private JMenuBar menuBar;
        private JButton newMenuButton;
        private List<JMenu> menuList;
        private ImageIcon newIcon;
        private ImageIcon openIcon;
        private ImageIcon deleteIcon;
     
        public DynMenu() {
            f = new JFrame();
            newIcon = new ImageIcon(getClass().getResource("/im/filenew.png"));
            openIcon = new ImageIcon(getClass().getResource("/im/fileopen.png"));
            deleteIcon = new ImageIcon(getClass().getResource("/im/fileclose.png"));
            menuBar = new JMenuBar();
            // menuBar.setLayout(new FlowLayout());
            newMenuButton = new JButton(new NewMenuAction());
     
            menuList = new ArrayList<JMenu>();
            menuBar.add(newMenuButton);
            f.setJMenuBar(menuBar);
            f.setSize(800, 600);
            f.setLocationRelativeTo(null);
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f.setVisible(true);
     
        }
     
        private class NewMenuAction extends AbstractAction {
     
            public NewMenuAction() {
                super("", newIcon);
            }
     
            @Override
            public void actionPerformed(ActionEvent e) {
     
                String menuName = JOptionPane.showInputDialog(f,
                        "Enter new menu name:");
                JMenu m = new JMenu(menuName);
                m.add(new OpenMenuAction(m));
                m.add(new DeleteMenuAction(m));
                m.addSeparator();
                for (int i = 1; i <= 9; i++) {
                    m.add(new JMenuItem("MenuItem " + i));
                }
                menuList.add(m);
                menuBar.add(m);
                menuBar.revalidate();
            }
        }
     
        private class DeleteMenuAction extends AbstractAction {
     
            private JMenu menuToDelete;
     
            public DeleteMenuAction(JMenu menuToDelete) {
                super("Delete", deleteIcon);
                this.menuToDelete = menuToDelete;
            }
     
            @Override
            public void actionPerformed(ActionEvent e) {
                menuBar.remove(menuToDelete);
                menuList.remove(menuToDelete);
                menuBar.revalidate();
     
            }
        }
     
        private class OpenMenuAction extends AbstractAction {
     
            private JMenu menuToOpen;
     
            public OpenMenuAction(JMenu menuToDelete) {
                super("Open", openIcon);
                this.menuToOpen = menuToDelete;
            }
     
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(f, "Menu opened: "
                        + menuToOpen.getText());
     
            }
        }
     
        public static void main(String[] args) {
     
            SwingUtilities.invokeLater(new Runnable() {
     
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(new WindowsLookAndFeel());
                    } catch (UnsupportedLookAndFeelException e) {
                        // TODO Bloc catch auto-généré
                        e.printStackTrace();
                    }
                    new DynMenu();
     
                }
            });
     
        }
     
    }
    (Il faudra que tu remplaces les icônes que j'ai utilisé bien sur ^^)

  9. #9
    Membre confirmé Avatar de Jose.N70
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut
    A défaut d'avoir trouvé une solution je vais utiliser la tienne.

    Juste pour donner un exemple :

    Sur windows ( XP ), si on fait démarrer => tous les programmes => on place la souris sur Accessoires, le menu s'ouvre, mais on peut aussi faire un clic droit pour :

    - Ouvrir
    - Explorer
    ----
    - Supprimer
    - Renommer
    ----
    - Trier par nom
    - Propriétés

    Merci à toi sinok

  10. #10
    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 menu démarrer d'un environnement graphique est en général une bête à part.

    Ouvre l'ensemble de tes applications et regarde si une seul d'elle permet de faire un clic droit sur le menu. De fait le système de JMenu dans Swing a été prévu pour un Use Case spécifique, de fait on pourrait surement le contourner, mais probablement pas avec un résultat obtimal, et beaucoup de hacks pas forcément des plus beaux.

  11. #11
    Membre confirmé Avatar de Jose.N70
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut
    Ta remarque est pertinente, de plus ton idée sera certainement plus "propre".

    Merci.
    --------------------------

    Juste pour info :p :

    Le clic droit sur le menu marche avec :
    - Thunderbird
    - Firefox

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

Discussions similaires

  1. JPopupMenu sur des panel différents
    Par rozie dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 20/07/2007, 14h58
  2. Affichage JPopupMenu sur clique droit
    Par grabriel dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 14/03/2007, 16h50
  3. Question sur le Jmenu avec un sous-menu
    Par Sylmandel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 05/01/2007, 10h35
  4. JTabbedPane & JPopupMenu sur un onglet
    Par ®om dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 21/07/2006, 14h50
  5. JPopupMenu lié à un JMenu transparent
    Par iuz dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 18/07/2006, 14h29

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