récupérer le choix effectué sur un JPopUpMenu
Bonjour à tous,
j'ai réalisé un popupmenu que je souhaite optimiser.
Le menu affiche 3 choix :
- "couleur_fils"
- "couleur_num_fils"
- "effecer_fils.
J'utilise pour chaque Jitem, une surveillance d'action (click) par un "addActionEvevent".
Cela fonctionne bien.
Sur le menu "couleur_fils", au "click", j'ouvre un sous-menu, proposant un choix de 9 couleurs.
1/ N'y a t-il pas une méthode plus efficace que celle d'un surveillance indépendante de chaque item, avec son "ActionEvent" dédiée??
Quand le nombre d'items est important, cela devient lourd et laborieux, et le code pratiquement identique est répété n fois.
2/ J'ai tenté plusieurs approches, notamment celle en commentaires, avec une surveillance par "MouseListener" au niveau de l'objet sous menu complet, espérant pouvoir identifier le choix de l'item de la couleur souhaitée, en détectant le "name" du composant où à lieu le clic. (C'est pour cela que les deux premières couleurs ont un "name")
Cela ne fonctionne pas car l'écouteur ne semble pas faire des "tranches" par item (noire, marron etc...) mais voir alors uniquement l'objet complet qui affiche toutes ces couleurs....
Dois-je réellement créer un listener par item???
3/ comment gère-t-on cela quand des menu proposent des dizaines de choix?? J'ai du mal à croire que chaque item ait son propre écouteur???...
Voila le code temporaire :
Code:
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 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
| public class MousePopupMenu extends JPopupMenu{
protected JPopupMenu sm;
/*
* ICI ON DEFINT LE CONSTRUCTEUR D'UN MENU CONTEXTUEL
*/
public MousePopupMenu() {
super();
// 1.1 On créé et ajoute un item "Couleurs_Fils" dans le menu
JMenuItem couleur_fils = new JMenuItem( "couleur_fils" );
couleur_fils.setIcon( new ImageIcon( "icones/visage.png" ) );
couleur_fils.setMnemonic( 'C' );
couleur_fils.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_DOWN_MASK) );
// on ajoute un listener
couleur_fils.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("on veut changer la couleur des fils");
couleur_fils.add( sm = sous_menu());
sm.show(Var.g1, Var.g1.getMousePosition().x , Var.g1.getMousePosition().y);
}
});
// on ajoute l'item 1 au menu.
this.add(couleur_fils);
//-------------------------------------------------------------------------------
//On ajoute une barre de Séparation dans le menu
this.addSeparator();
//----------------------------------------------------------------------------------
// 1.2 On créé et ajoute un item ""couleur_num_fils"
JMenuItem couleur_num_fils = new JMenuItem( "couleur_num_fils" );
couleur_num_fils.setIcon( new ImageIcon( "icones/open.png" ) );
couleur_num_fils.setMnemonic( 'N' );
couleur_num_fils.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_DOWN_MASK) );
// on ajoute un listener
couleur_num_fils.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("on veut changer les numéros des fils");
}
});
// ajout du item_2 au menu.
this.add(couleur_num_fils);
//--------------------------------------------------------------------------------
//On ajoute une barre de Séparation dans le menu
this.addSeparator();
//----------------------------------------------------------------------------------
// 1.3 On créé et ajoute un item "effacer_fils"
JMenuItem effacer_fils = new JMenuItem( "effacer_fils" );
effacer_fils.setIcon( new ImageIcon( "icones/save.png" ) );
effacer_fils.setMnemonic( 'E' );
effacer_fils.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_E, KeyEvent.CTRL_DOWN_MASK) );
//on ajoute un listener
effacer_fils.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("on veut effacer tous les fils");
Click_MenuDroit.effacer_tous_les_fils();
}
});
// ajout du item_3 au menu.
this.add(effacer_fils);
//-------------------------------------------------------------------------------------
} // fin du menu
// ------------- fonction sous_menu couleur de fil -------------------------------
public static JPopupMenu sous_menu() {
JPopupMenu couleur = new JPopupMenu();
JMenuItem noire = new JMenuItem ("noire");
noire.setName("no");
JMenuItem marron = new JMenuItem ("marron");
marron.setName("ma");
JMenuItem rouge = new JMenuItem ("rouge");
JMenuItem orange = new JMenuItem ("orange");
JMenuItem jaune = new JMenuItem ("jaune");
JMenuItem vert = new JMenuItem ("vert");
JMenuItem bleu = new JMenuItem ("bleu");
JMenuItem gris = new JMenuItem ("gris");
JMenuItem blanc = new JMenuItem ("blanc");
couleur.add(noire);
couleur.addSeparator();
couleur.add(marron);
couleur.addSeparator();
couleur.add (rouge);
couleur.addSeparator();
couleur.add (orange);
couleur.addSeparator();
couleur.add(jaune);
couleur.addSeparator();
couleur.add(vert);
couleur.addSeparator();
couleur.add(bleu);
couleur.addSeparator();
couleur.add (gris);
couleur.addSeparator();
couleur.add (blanc);
noire.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("on sélectionne la couleur NOIRE.");
}
});
// couleur.addMouseListener( new MouseListener() {
//
// @Override
// public void mouseClicked(MouseEvent e) {
// System.out.println("j'ai cliqué");
//
// }
//
// @Override
// public void mousePressed(MouseEvent e) {
// System.out.println("j'ai cliqué");
//
// }
//
// @Override
// public void mouseReleased(MouseEvent e) {
//
//
// }
//
// @Override
// public void mouseEntered(MouseEvent e) {
// System.out.println("composant : " + e.getComponent().getName());
//
// }
//
// @Override
// public void mouseExited(MouseEvent e) {
//
//
// }
// });
return couleur;
} // =========== fin de fonction ====================
} //===================== fin de CLASSE ====================== |
Merci à tous pour vos lectures et vos idées à venir...8O