Visualizzazione dei risultati da 1 a 7 su 7

Discussione: scelta voci di submenu

  1. #1

    scelta voci di submenu

    ciao

    ho il seguente problema :
    ho definito un menu ed un submenu , ho associato alle voci di submenu
    lo stesso ascoltatore , il quale deve istanziare una classe in funzione
    della voce di submenu scelta ;
    non so come far riconoscere all'ascoltare quale sia la voce di menu scelta

    ho provato con getAccessibleDescription e setAccessibleDescription
    ma non riesco a farli funzionare , ottengo errori di compilazione ;

    sapete dirmi come si fa normalmente ?

    codice:
    import javax.swing.*;
    import java.lang.*;
    import java.util.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class JMenu1 extends JFrame
    {
        class MenuItemListener implements ActionListener {
              public void actionPerformed(ActionEvent event) {
                 JMenuItem source = (JMenuItem)event.getSource();
                 String message = null;
                 System.out.println("source: " + source );
              }
        }  
       
        JMenuBar menuBar;
        JMenu menu, submenucli;
        JMenuItem menuItem;
       
        MenuItemListener itemListener = new MenuItemListener();
    
        //Constructor for objects of class JMenu1
        public JMenu1()
        {
    
         //Create the menu bar.
         menuBar = new JMenuBar();
    
         //a submenucli
         menu.addSeparator();
         submenucli = new JMenu("gestione clienti");
         submenucli.setMnemonic(KeyEvent.VK_S);
    
         menuItem = new JMenuItem("inserimento");
         menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2, 
                                           ActionEvent.ALT_MASK));
         submenucli.add(menuItem);
         menuItem.addActionListener(itemListener);
    
         menuItem = new JMenuItem("cancellazione");
         menuItem.addActionListener(itemListener);
         submenucli.add(menuItem);
         menuItem = new JMenuItem("modifica");
         menuItem.addActionListener(itemListener);
         submenucli.add(menuItem);
         menuItem = new JMenuItem("lista");
         menuItem.addActionListener(itemListener);
         submenucli.add(menuItem);
    
         menu.add(submenucli);
    
         menuBar.add(menu);
               
         JPanel panel = new JPanel();      
         panel.add(menuBar);
         getContentPane().add(panel);
        
         setTitle("prova menu ");
         setSize(400, 300);
         setLocationRelativeTo(null);
         setDefaultCloseOperation(EXIT_ON_CLOSE);
         setVisible(true);
    
        }
    
             public static void main(String[] args) {
    
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    JMenu1 ex = new JMenu1();
                }
            });
     }
    grazie
    ciao

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Il menu che ha scatenato l'evento è l'oggetto restituito da getSource() dell'evento ActionEvent, che tu già ottieni correttamente... quindi, perchè vai a farti del male con getAccessibleXXX che sono metodi usati dai Look & Feel???


    Il problema è che tu riutilizzi l'oggetto "menuItem" per costruire tanti menu diversi... e non va bene: devi definire tanti oggetti JMenuItem quanti sono gli effettivi item, così da poterli confrontare (con equals() o addirittura con l'operatore == )

    L'alternativa è ottenere il testo del JMenuItam:

    codice:
    JMenuItem item = (JMenuItem) ae.getSource();
    if ( "cancellazione".equals(item.getText()) ) {
       ... // E' il menu cancellazione
    }
    ...

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    grazie mille

    in effetti ho fatto col getText , mi sembra la più semplice ...
    però non sapevo che si potesse usare, perchè guardando la doc. di jmenuitem non avevo trovato questo metodo , o fose non l'ho visto ..
    ciao

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da gbu123
    grazie mille

    in effetti ho fatto col getText , mi sembra la più semplice ...
    però non sapevo che si potesse usare, perchè guardando la doc. di jmenuitem non avevo trovato questo metodo , o fose non l'ho visto ..
    ciao
    Infatti, il metodo getText() non è di JMenuItem, ma è di AbstractButton da cui JMenuItem deriva. Ricorda che non basta soffermarsi all'elenco dei metodi "propri" della classe, ma bisogna sempre tenere sotto controllo la gerarchia di classi (la si vede in testa nella documentazione) e, di conseguenza, i metodi che vengono ereditati (dalle classi della gerarchia e dalle interfacce implementate): questi metodi si trovano nelle sezioni sottostanti a quella dei metodi propri:

    Methods inherited from class javax.swing.AbstractButton
    Methods inherited from class javax.swing.JComponent
    ...

    Poi, se sai che un determinato componente può avere del testo (e, addirittura, uno o più dei suoi costruttori vuole una o più stringhe), allora è facilmente immaginabile che esista un metodo che restituisce quel testo... quindi è bene cercare.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    ok
    grazie
    P.S. mi sembrava di aver visto tutte le classi madri , forse non sono arrivato alla abstractbutton

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da gbu123
    ok
    grazie
    P.S. mi sembrava di aver visto tutte le classi madri , forse non sono arrivato alla abstractbutton
    Ehm... conviene sempre andare dalla più vicina alla classe (ovvero, la diretta genitrice, ovvero proprio AbstractButton, ovvero la prima di cui vengono elencati i metodi subito dopo queli "propri" della classe in esame) a ritroso... anche perchè andando sempre indietro si arriva a Object, che dopo un po' uno dovrebbe conoscere a memoria...

    Questi sono solo dei suggerimenti, eh...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    ok, grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.