import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;


public class ActionSample extends JPanel
{
    public JMenuBar menuBar;
    public JToolBar toolBar;
    
    public ActionSample(){
        super(true);
        
        //Crea una JMenuBar
        menuBar = new JMenuBar();
        menuBar.setBorder(new BevelBorder(BevelBorder.RAISED));
        
        // Crea un JMenu e lo aggiunge alla JMenuBar precedente
        JMenu menu = new JMenu("Menu");
        menuBar.add(menu);
        
        // Crea una JToolBar
        toolBar = new JToolBar();
        toolBar.setBorder(new EtchedBorder());
        
        // Crea un'istanza della classe OpenAction, assegnandole
        // una descrizione e una icona
        OpenAction openAction = new OpenAction("Apri",
                      new ImageIcon("open.gif"));
        
        // Crea un JButton da aggiungere alla toolbar
        JButton openButton = new JButton();
        openButton.setAction( openAction);    
        toolBar.add(openButton);
        
        // Crea un JMenuItem da aggiungere al componente di tipo JMenu
        JMenuItem openItem = new JMenuItem();
        openItem.setAction(openAction);
        menu.add(openItem);
    }
    
    class OpenAction extends AbstractAction{
        public OpenAction (String text, Icon icon){
            super(text,icon);      
        }
      
        // Implementazione del metodo actionPerformed() che gestisce
        // la funzionalità propria dell'action object
        public void actionPerformed(ActionEvent e){
            System.out.println("Eseguita una Action di
       tipo \"" + e.getActionCommand() + "\"");
        }
    }
      
    
    public static void main(String[] args){
        ActionSample sAction = new ActionSample();    
        
        JFrame frame = new JFrame("Esempio sulle Swing Action");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setJMenuBar(sAction.menuBar);
        frame.getContentPane().add(sAction.toolBar,BorderLayout.NORTH);
        frame.setSize(250, 250);
        frame.setVisible(true);
    }
}