Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre du Club
    Homme Profil pro Alf Cedano
    Inscrit en
    septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Nom : Homme Alf Cedano
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : septembre 2010
    Messages : 116
    Points : 57
    Points
    57

    Par défaut Récupérer nom de JMenuItem cliqué

    Bonjour à tous.

    Je viens vers vous après quelques heures d'essai sans succès. Je voudrais tout simplement récuperer le nom de variable des JMenuItems contenus dans un JPopupMenu que j'affiche après avoir cliqué sur une ligne d'une JTable. C'est à dire, si mon JMenuItem s'appele "mntmRptB01" et je clique dessus, je voudrais récupérer mntmRptB01 dans :

    Code :
    1
    2
    3
    4
    5
    	public void actionPerformed(ActionEvent event) {
        	JMenuItem source = (JMenuItem) (event.getSource());
    		String s = "Menu Item source: " + source.getText();
    		System.out.println(IdKey + " " +s);
    		}
    J'avais essayé avec getSource tout seul, mais ce que j'obtiens c'est une ligne très longue avec toute la description de mon JMenuItem. J'ai trouvé le code ci-dessus et là je récupère le label de mon JMenuItem et pas son nom, c'est à dire la même chose que si je utilisais getActionCommand.

    L'idée est d'appeler une autre classe, selon le JMenuItem cliqué. Je pourrais le faire avec les labels, mais les labels contiennent beaucoup plus de texte, en plus dans les noms de JMenuItem j'emploie des valeurs à la fin pour me repérer dans mon projet (B01, B10, C21, E11...).

    Je mets ma classe PopupMenu.

    Je vous remercie d'avance pour vos lumières.

    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
    package principal;
     
     
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
     
    import javax.swing.ImageIcon;
     
    import javax.swing.JMenu;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JPopupMenu;
    import javax.swing.JSeparator;
    import javax.swing.JTable;
     
     
    public class PopupMenuExample extends JPanel implements ActionListener{  
    	private static final long serialVersionUID = 1L;
    	public JPopupMenu popupMenu;
    	private int IdKey;
     
    	public PopupMenuExample() {
    		popupMenu = new JPopupMenu();
    //		ActionListener menuListener = new ActionListener() {
     
     
     //     }
     
    	JMenu mnB = new JMenu("BAUTISMO\n");
    	mnB.setFont(new Font("Lucida Grande", Font.BOLD, 12));
    	popupMenu.add(mnB);
     
    		JMenuItem mntmRptB01 = new JMenuItem("Acta de Bautismo");
    		mntmRptB01.setIcon(new ImageIcon("/Users/aCedano/Pictures/Imagenes/16x16-free-application-icons/png/16x16/About.png"));
    		mntmRptB01.setFont(new Font("Lucida Grande", Font.ITALIC, 12));
    		mntmRptB01.addActionListener(this);
    		mnB.add(mntmRptB01);
     
    		mnB.addSeparator();
     
    		JMenuItem mntmRptB02 = new JMenuItem("Reporte Bautizados en \u00E9sta fecha");
    		mntmRptB02.setIcon(new ImageIcon("/Users/aCedano/Pictures/Imagenes/16x16-free-application-icons/png/16x16/Downloads folder.png"));
    		mntmRptB02.setFont(new Font("Lucida Grande", Font.ITALIC, 12));
    		mntmRptB02.addActionListener(this);
    		mnB.add(mntmRptB02);
    		mnB.addSeparator();
     
    	JSeparator separator = new JSeparator();
    	popupMenu.add(separator);
     
    	JMenu mnC = new JMenu("CONFIRMACI\u00D3N");
    	mnC.setFont(new Font("Lucida Grande", Font.BOLD, 12));
    	popupMenu.add(mnC);
     
    		JMenuItem mntmRptC01 = new JMenuItem("Acta de Confirmaci\u00F3n");
    		mntmRptC01.setFont(new Font("Lucida Grande", Font.ITALIC, 12));
    		mnC.add(mntmRptC01);
     
    		JMenuItem mntmC21 = new JMenuItem("Reporte al Obispado");
    		mntmC21.setFont(new Font("Lucida Grande", Font.ITALIC, 12));
    		mnC.add(mntmC21);
     
    	JSeparator separator_1 = new JSeparator();
    	popupMenu.add(separator_1);
     
    	JMenu mnM = new JMenu("MATRIMONIO");
    	mnM.setFont(new Font("Lucida Grande", Font.BOLD, 12));
    	popupMenu.add(mnM);
     
    		JMenuItem mntmM01 = new JMenuItem("Acta de Matrimonio");
    		mntmM01.setFont(new Font("Lucida Grande", Font.ITALIC, 12));
    		mnM.add(mntmM01);
     
    		JMenuItem mntmRptM21 = new JMenuItem("Notificaci\u00F3n a Parroquia de Bautismo");
    		mntmRptM21.setFont(new Font("Lucida Grande", Font.ITALIC, 12));
    		mnM.add(mntmRptM21);
     
    	JSeparator separator_2 = new JSeparator();
    	popupMenu.add(separator_2);
     
    	JMenu mnE = new JMenu("EUCARIST\u00CDA");
    	mnE.setFont(new Font("Lucida Grande", Font.BOLD, 12));
    	popupMenu.add(mnE);
     
    		JMenuItem mntmRptE01 = new JMenuItem("Acta de 1ra Comuni\u00F3n");
    		mntmRptE01.setFont(new Font("Lucida Grande", Font.ITALIC, 12));
    		mnE.add(mntmRptE01);
     
      }
    	public void actionPerformed(ActionEvent event) {
        	JMenuItem source = (JMenuItem) (event.getSource());
    		String s = "Menu Item source: " + source.getText();
    		System.out.println(IdKey + " " +s);
    		}
      public void show(JTable jtbProducto, int xposition, int yposition, int IdKey) {
    		// TODO Auto-generated method stub
    	this.IdKey = IdKey;	
    	popupMenu.show(jtbProducto, xposition, yposition);
     
      }
    }

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro Renaud Warnotte
    Développeur informatique
    Inscrit en
    août 2006
    Messages
    2 659
    Détails du profil
    Informations personnelles :
    Nom : Homme Renaud Warnotte
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 2 659
    Points : 5 026
    Points
    5 026

    Par défaut

    Tu peux récupérer le nom de n'importe quel JComponent avec getName(). A condition bien entendu d'avoir donné un nom au JComponent.

  3. #3
    Nouveau Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    août 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : août 2009
    Messages : 38
    Points : 32
    Points
    32

    Par défaut Confirmation

    Salut, je confirme la solution apportée par 'wax78'. De plus c'est plus simple et pratique.

  4. #4
    Membre du Club
    Homme Profil pro Alf Cedano
    Inscrit en
    septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Nom : Homme Alf Cedano
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : septembre 2010
    Messages : 116
    Points : 57
    Points
    57

    Par défaut

    Bonjour et merci de vos réponses.

    Je n'arrive pas avec getName...
    Code :
    1
    2
    3
    	public void actionPerformed(ActionEvent event) {
    		System.out.println (event.getName);
    		}
    J'ai le message d'erreur:
    Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem:
    getName cannot be resolved or is not a field

    Mais vous m'avez conduit sur une piste de solution... En effet le label du JMenuItem est donné dans sa création:

    Code :
    		JMenuItem mntmRptB01 = new JMenuItem("Acta de Bautismo");
    Donc dans la création de mon JMenuItem je peux assigner quelque chose d'autre avec setActionCommand:

    Code :
    mntmRptB01.setActionCommand("rptB01");
    ...et le récupérer après:

    Code :
    1
    2
    3
    4
    5
    6
    7
    	public void actionPerformed(ActionEvent event) {
    		String nomDoc = event.getActionCommand();
    //		System.out.println (nomDoc);
    		if (nomDoc == "rptB01") {
    	  	     new ImprJasper("IdPersona", idKey, nomDoc, "PDF");
    		}	
    		}
    C'est donc ainsi que j'ai résolu mon cas. Merci pour la piste.

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro Renaud Warnotte
    Développeur informatique
    Inscrit en
    août 2006
    Messages
    2 659
    Détails du profil
    Informations personnelles :
    Nom : Homme Renaud Warnotte
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 2 659
    Points : 5 026
    Points
    5 026

    Par défaut

    Même si le problème est résolu, en fait c'était pas :
    Code :
    1
    2
    3
    	public void actionPerformed(ActionEvent event) {
    		System.out.println (event.getName);
    		}
    mais plutot quelque chose du genre que je visais (pas testé) :
    Code :
    1
    2
    3
    	public void actionPerformed(ActionEvent event) {
    		System.out.println (event.getSource().getName());
    		}

  6. #6
    Membre du Club
    Homme Profil pro Alf Cedano
    Inscrit en
    septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Nom : Homme Alf Cedano
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : septembre 2010
    Messages : 116
    Points : 57
    Points
    57

    Par défaut

    @wax78

    J'ai testé par curiosité et ce n'est pas possible dans mon cas. J'ai l'erreur: "the method getName() is undefined for the type Object".

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro Renaud Warnotte
    Développeur informatique
    Inscrit en
    août 2006
    Messages
    2 659
    Détails du profil
    Informations personnelles :
    Nom : Homme Renaud Warnotte
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 2 659
    Points : 5 026
    Points
    5 026

    Par défaut

    Oui a mon avis il faut caster "la source" en JComponent.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •