| HOME | FORUM | INDICE |

download PopupMenuEsempio.java

/*
    L'esempio mostra l'utilizzo di un PopupMenu.

    Autore: Agosto 2009, Giovanni Iacobelli - http://www.iacosoft.com

*/


import java.awt.*;
import java.awt.event.*;

class PopupMenuEsempio extends Frame
{
    Button cmd= new Button("Clicca");
    PopupMenu mnFile= new PopupMenu();

    //coordinate del mouse
    int posx=0;
    int posy=0;

    //costruttore
    public PopupMenuEsempio()
    {    
        //richiama il costruttore della classe base per impostare il titolo della finestra
        super("Finestra Con PopupMenu");

        int larg= 400;
        int alt= 300;
    
        //aggiunge il gestore per l'evento di chiusura della finestra
        addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){System.exit(0);} });
        
        //imposta la dimensione della finestra
        setSize(larg, alt);

        //determina le dimensioni dello schermo
        GraphicsEnvironment ge= GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice dv= ge.getDefaultScreenDevice();
        GraphicsConfiguration cfgScr= dv.getDefaultConfiguration();
        Rectangle dim= cfgScr.getBounds();

        //imposta la posizione della finestra centrata rispetto allo schermo.
        setLocation((dim.width - larg)/2, (dim.height - alt)/2);
        
        //nessun ManagerLayout
        setLayout(null);
        
        //imposta il carattere utilizzato per la label del pulsante
        cmd.setFont(new Font("Arial", Font.BOLD, 14));
        
        //posiziona e ridimensiona il pulsante
        cmd.setBounds(100,100,70,20); //x,y,larghezza, altezza

        //aggiunge il gestore per l'evento CLICK
        cmd.addActionListener(new GestoreClickCmd(this));
        add(cmd);

        GestoreClickMenu gest= new GestoreClickMenu();

/* INIZIO MENU FILE */
        MenuItem mnApri= new MenuItem("Apri", new MenuShortcut(65)); //65 è ascii di A (è usato CTRL + A)
        mnApri.addActionListener(gest);
        mnFile.add(mnApri);

        /* APRI TEMPLATE */
        Menu mnApriTemplate= new Menu("Apri Template");
        
        MenuItem mnProgetto= new MenuItem("Progetto");
        mnProgetto.addActionListener(gest);
        mnApriTemplate.add(mnProgetto);

        MenuItem mnArchivio= new MenuItem("Archivio");
        mnArchivio.addActionListener(gest);
        mnApriTemplate.add(mnArchivio);
        
        mnFile.add(mnApriTemplate);
        /* FINE APRI TEMPLATE */
        
        mnFile.addSeparator();

        MenuItem mnChiudi= new MenuItem("Chiudi");
        mnChiudi.addActionListener(gest);
        
        mnFile.add(mnChiudi);

        mnFile.addSeparator();

        MenuItem mnEsci= new MenuItem("Esci");
        mnEsci.addActionListener(gest);
        
        mnFile.add(mnEsci);
/* FINE MENU FILE */

        add(mnFile);

        //enableEvents() farà in modo il metodo processMouseEvent() sia invocato
        enableEvents(Event.MOUSE_ENTER);
        enableEvents(Event.MOUSE_MOVE);
        enableEvents(Event.MOUSE_DOWN);
        enableEvents(Event.MOUSE_EXIT);
        enableEvents(Event.MOUSE_UP);

        //rende la finestra visibile
        setVisible(true);
    }

    //override della classe base per catturare la posizione del mouse
    protected void processMouseEvent(MouseEvent e)
    {
        posx= e.getX();
        posy= e.getY();
    }

    //visualizza il popupmenu
    public void VisualizzaMenu(Object obj)
    {
        mnFile.show((Component)obj,posx,posy);
    }

    //gestore per la selezione dei MenuItem
    public class GestoreClickMenu implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            MenuItem m= (MenuItem) e.getSource();
            String cmd= e.getActionCommand();
            
            if (cmd.compareTo("Esci") == 0)
            {
                System.exit(0);
            }
        }
    }

    //gestore dell'evento CLICK del pulsante
    public class GestoreClickCmd implements ActionListener
    {
        PopupMenuEsempio win= null;
        public GestoreClickCmd(PopupMenuEsempio obj)
        {
            this.win= obj;
        }

        public void actionPerformed(ActionEvent e)
        {
            //visualizza il PopupMenu
            VisualizzaMenu(win);
        }
    }

    //punto d'ingresso dell'applicazione
    public static void main(String[] args)
    {
        new PopupMenuEsempio();
    }
}