Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
java.lang.Object
j ava.awt.Com ponent
java.awt.Container
j av ax.swing.JMenuBar
javax.swing.AbstractButton
j av ax.swing.JMenuItem
j av ax.swing.JMenu
Struttura di un menu
Un menu costituito da: una barra del menu, uno o pi menu, una o pi voci di menu per ciascun menu, eventuali sottomenu. Due menu
un sottomenu
Le voci di un menu
Figura 1. Immagine tratta da The Java Tutorials - How to Use Menus url: http://download.oracle.com/javase/tutorial/uiswing/components/menu.html
La barra del menu gestita mediante la classe JMenuBar. La posizione in cui viene collocata la barra di menu dipende dalla piattaforma in uso. Solitamente si trova sotto la barra del titolo della finestra. I menu sono gestiti mediante la classe JMenu. Un menu pu avere icone vicino alle voci e sottomenu. Pu anche essere pop up. Inoltre, possibile impostare per esso colori e font. Le voci di menu sono gestite mediante la classe JMenuItem.
Creare un menu
Supponiamo di voler creare una barra di menu con 1 menu. Il menu ha 2 voci: voce 1 e voce 2. Definiamo i componenti del menu Per prima cosa definiamo la barra del menu come istanza della classe JMenuBar: JMenuBar menuBar; Poi definiamo il menu come istanza della classe JMenu: JMenu menu; Infine, definiamo tutte le voci di menu come istanze di JMenuItem: JMenuItem voce1; JMenuItem voce 2; Creiamo i componenti del menu Creiamo la barra di menu usando il costruttore di JMenuBar, la cui firma :
public JMenuBar()
menuBar = new JMenuBar(); Creiamo il menu con il costruttore di JMenu la cui firma :
Figura 2. Frame con una menubar import import import import javax.swing.JFrame; javax.swing.JMenu; javax.swing.JMenuBar; javax.swing.JMenuItem;
@SuppressWarnings("serial") public class MenuFrame extends JFrame { public static final int WIDTH = 250; public static final int HEIGHT = 150; public MenuFrame(){ //il frame super("Esempio Menu"); setSize(WIDTH, HEIGHT); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //componenti del menu JMenuBar menubar = new JMenuBar(); //la menubar JMenu file = new JMenu("File"); //menu File JMenu modifica = new JMenu("Modifica"); //menu Modifica JMenu formato = new JMenu("Formato"); //menu Formato JMenuItem nuovo = new JMenuItem("Nuovo"); //item Nuovo JMenuItem apri = new JMenuItem("Apri"); //item Apri JMenuItem salva = new JMenuItem("Salva"); //item Salva JMenuItem chiudi = new JMenuItem("Chiudi"); //item Chiudi Bocchi Cinzia Ultimo aggiornamento: 10/11/2011
taglia = new JMenuItem("Taglia"); //item Taglia copia = new JMenuItem("Copia"); //item Copia incolla = new JMenuItem("Incolla"); //item Incolla carattere = new JMenuItem("Carattere"); //item Carattere
//inserimento degli item nel menu File file.add(nuovo); file.add(apri); file.add(salva); file.addSeparator(); file.add(chiudi); //inserimento degli item nel menu Modifica modifica.add(taglia); modifica.add(copia); modifica.add(incolla); //inserimento degli item nel menu Formato formato.add(carattere); //inserimento dei menu nella menubar menubar.add(file); menubar.add(modifica); menubar.add(formato); //inserimento della menubar nel frame setJMenuBar(menubar); } public static void main(String[] args){ MenuFrame frame = new MenuFrame(); frame.setVisible(true); } }
Scorciatoie da tastiera
I menu supportano due tipi di scorciatoie da tastiera: mnemonic e acceleratori. Lalternativa mnemonic consente di utilizzare la tastiera per navigare, aumentando cos laccessibilit. Uno mnemonic una chiave che permette di scegliere una voce di menu tra quelle visibili. Per esempio, quasi tutti i menu File hanno come mnemonic la lettera F; ce ne accorgiamo perch la lettera appare sottolineata. Premendo la combinazione di tasti ALT + MNEMONIC, possiamo aprire il menu senza usare il mouse. Lalternativa rappresentata dagli acceleratori offre delle scorciatoie da tastiera per scegliere delle voci di menu, indipendentemente dal fatto che esse siano visibili. Un acceleratore una combinazione di chiavi del tipo CTRL + MAIUSC + 2. Gli acceleratori possono essere assegnati solo alle voci di menu che non rappresentano sotto-menu (sono dette foglie). La combinazione di chiavi di un acceleratore viene mostrata nel menu, alla destra della voce che rappresenta.
Per impostare uno mnemonic per una voce di menu menuItem, occorre scrivere, in fase di creazione del menu:
menuItem = new JMenuItem("Item", KeyEvent.VK_I);
dove la lettera I la lettera della voce di menu che apparir sottolineata. In alternativa, si pu utilizzare il metodo setMnemonic, dopo aver creato la voce di menu; questo metodo, inoltre, utilizzabile anche con i menu (non solo con gli item).
menuItem.setMnemonic(KeyEvent.VK_I);
oppure
menuItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_T, ActionEvent.CRTL_MASK));
o, ancora
menuItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_T, ActionEvent.SHIFT_MASK));
sulla base del tasto che deve essere premuto insieme a quello indicato dalla costante di KeyEvent. Nella figura seguente rappresentato il frame della figura 2 dopo le modifiche apportate dallinserimento di scorciatoie da tastiera.
@SuppressWarnings("serial") public class MenuFrame extends JFrame { public static final int WIDTH = 250; public static final int HEIGHT = 150; public MenuFrame(){ //il frame super("Esempio Menu"); setSize(WIDTH, HEIGHT); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //componenti del menu JMenuBar menubar = new JMenuBar(); //la menubar JMenu file = new JMenu("File"); //menu File JMenu modifica = new JMenu("Modifica"); //menu Modifica JMenu formato = new JMenu("Formato"); //menu Formato JMenuItem nuovo = new JMenuItem("Nuovo"); //item Nuovo JMenuItem apri = new JMenuItem("Apri"); //item Apri JMenuItem salva = new JMenuItem("Salva"); //item Salva JMenuItem chiudi = new JMenuItem("Chiudi"); //item Chiudi JMenuItem taglia = new JMenuItem("Taglia"); //item Taglia JMenuItem copia = new JMenuItem("Copia"); //item Copia JMenuItem incolla = new JMenuItem("Incolla"); //item Incolla JMenuItem carattere = new JMenuItem("Carattere"); //item Carattere //mnemonic file.setMnemonic(KeyEvent.VK_F); modifica.setMnemonic(KeyEvent.VK_M); formato.setMnemonic(KeyEvent.VK_R); nuovo.setMnemonic(KeyEvent.VK_N); apri.setMnemonic(KeyEvent.VK_A); salva.setMnemonic(KeyEvent.VK_S); chiudi.setMnemonic(KeyEvent.VK_C); taglia.setMnemonic(KeyEvent.VK_T); copia.setMnemonic(KeyEvent.VK_P); incolla.setMnemonic(KeyEvent.VK_I); carattere.setMnemonic(KeyEvent.VK_C); //accelerator nuovo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK)); apri.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.CTRL_MASK)); salva.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK)); chiudi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));
taglia.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, ActionEvent.CTRL_MASK)); copia.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.CTRL_MASK)); incolla.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, ActionEvent.CTRL_MASK)); carattere.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK)); //inserimento degli item nel menu File file.add(nuovo); file.add(apri); file.add(salva); file.addSeparator(); file.add(chiudi); //inserimento degli item nel menu Modifica modifica.add(taglia); modifica.add(copia); modifica.add(incolla); //inserimento degli item nel menu Formato formato.add(carattere); //inserimento dei menu nella menubar menubar.add(file); menubar.add(modifica); menubar.add(formato); //inserimento della menubar nel frame setJMenuBar(menubar); } public static void main(String[] args){ MenuFrame frame = new MenuFrame(); frame.setVisible(true); } }
Rigo 1: crea la toolbar come istanza della classe JToolBar. Rigo 2: crea una icona a partire dallimmagine specificata come parametro (altri formati consentiti: png, jpg). Rigo 3: crea un pulsante con licona. Rigo 4: aggiunge il pulsante alla toolbar. Rigo 5: aggiunge la toolbar al contentPane, nellarea NORTH. Per quanto riguarda le immagini da utilizzare per le icone, possibile scaricare interi pacchetti dal web oppure utilizzare i pulsanti con look and feel Java, scaricabili allurl http://java.sun.com/developer/techDocs/hi/repository/ Attenzione! Se si desidera che le icone siano visualizzate correttamente anche dopo aver esportato il progetto creato, occorre adottare il seguente accorgimento: 1. inserire le immagini allinterno di una cartella interna al progetto, per esempio la cartella img 2. sostituire il codice del rigo 2 con
Icon icon = new ImageIcon(getClass().getClassLoader().getResource("img/immagine.gif"));
10
import import import import import import import import import import import import import
java.awt.BorderLayout; java.awt.event.ActionEvent; java.awt.event.KeyEvent; javax.swing.Icon; javax.swing.ImageIcon; javax.swing.JButton; javax.swing.JComboBox; javax.swing.JFrame; javax.swing.JMenu; javax.swing.JMenuBar; javax.swing.JMenuItem; javax.swing.JToolBar; javax.swing.KeyStroke;
@SuppressWarnings("serial") public class MenuFrame extends JFrame { public static final int WIDTH = 350; public static final int HEIGHT = 250; public MenuFrame(){ //il frame super("Esempio Menu"); setSize(WIDTH, HEIGHT); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
11
//********************* MENUBAR *********************************** //componenti del menu JMenuBar menubar = new JMenuBar(); //la menubar JMenu file = new JMenu("File"); //menu File JMenu modifica = new JMenu("Modifica"); //menu Modifica JMenu formato = new JMenu("Formato"); //menu Formato JMenuItem nuovo = new JMenuItem("Nuovo"); //item Nuovo JMenuItem apri = new JMenuItem("Apri"); //item Apri JMenuItem salva = new JMenuItem("Salva"); //item Salva JMenuItem chiudi = new JMenuItem("Chiudi"); //item Chiudi JMenuItem taglia = new JMenuItem("Taglia"); //item Taglia JMenuItem copia = new JMenuItem("Copia"); //item Copia JMenuItem incolla = new JMenuItem("Incolla"); //item Incolla JMenuItem carattere = new JMenuItem("Carattere"); //item Carattere //mnemonic file.setMnemonic(KeyEvent.VK_F); modifica.setMnemonic(KeyEvent.VK_M); formato.setMnemonic(KeyEvent.VK_R); nuovo.setMnemonic(KeyEvent.VK_N); apri.setMnemonic(KeyEvent.VK_A); salva.setMnemonic(KeyEvent.VK_S); chiudi.setMnemonic(KeyEvent.VK_C); taglia.setMnemonic(KeyEvent.VK_T); copia.setMnemonic(KeyEvent.VK_P); incolla.setMnemonic(KeyEvent.VK_I); carattere.setMnemonic(KeyEvent.VK_C); //accelerator nuovo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK)); apri.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.CTRL_MASK)); salva.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK)); chiudi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK)); taglia.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, ActionEvent.CTRL_MASK)); copia.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.CTRL_MASK)); incolla.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, ActionEvent.CTRL_MASK)); carattere.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK)); //inserimento degli item nel menu File file.add(nuovo); file.add(apri); file.add(salva); file.addSeparator(); file.add(chiudi); //inserimento degli item nel menu Modifica modifica.add(taglia); modifica.add(copia); modifica.add(incolla); //inserimento degli item nel menu Formato Bocchi Cinzia Ultimo aggiornamento: 10/11/2011
12
formato.add(carattere); //inserimento dei menu nella menubar menubar.add(file); menubar.add(modifica); menubar.add(formato); //inserimento della menubar nel frame setJMenuBar(menubar); //********************* TOOLBAR *********************************** //creazione delle icone Icon nuovoIcon = new ImageIcon(getClass().getClassLoader().getResource("icons/New16.gif")); Icon apriIcon = new ImageIcon(getClass().getClassLoader().getResource("icons/Open16.gif")); Icon salvaIcon = new ImageIcon(getClass().getClassLoader().getResource("icons/Save16.gif")); Icon tagliaIcon = new ImageIcon(getClass().getClassLoader().getResource("icons/Cut16.gif")); Icon copiaIcon = new ImageIcon(getClass().getClassLoader().getResource("icons/Copy16.gif")); Icon incollaIcon = new ImageIcon(getClass().getClassLoader().getResource("icons/Paste16.gif")); //creazione dei pulsanti JButton nuovoButton = new JButton(nuovoIcon); JButton apriButton = new JButton(apriIcon); JButton salvaButton = new JButton(salvaIcon); JButton tagliaButton = new JButton(tagliaIcon); JButton copiaButton = new JButton(copiaIcon); JButton incollaButton = new JButton(incollaIcon); //creazione della combobox String[] font = {"Arial", "Courier", "Times New Roman", "Verdana"}; JComboBox<String> fontList = new JComboBox<String>(font); //creazione della toolbar con pulsanti rollover JToolBar toolbar = new JToolBar(); toolbar.setRollover(true); //inserimento dei pulsanti e della combobox nella toolbar toolbar.add(nuovoButton); toolbar.add(apriButton); toolbar.add(salvaButton); toolbar.addSeparator(); toolbar.add(tagliaButton); toolbar.add(copiaButton); toolbar.add(incollaButton); toolbar.addSeparator(); toolbar.add(fontList); //aggiunta dei tooltip ai pulsanti nuovoButton.setToolTipText("Nuovo"); apriButton.setToolTipText("Apri"); salvaButton.setToolTipText("Salva"); tagliaButton.setToolTipText("Taglia"); copiaButton.setToolTipText("Copia"); incollaButton.setToolTipText("Incolla");
13
//inserimento della toolbar nel frame getContentPane().add(toolbar, BorderLayout.NORTH); } public static void main(String[] args){ MenuFrame frame = new MenuFrame(); frame.setVisible(true); } }
Nota: le immagini sono state salvate nella cartella icons e questa stata inserita nella cartella src del progetto. Lide utilizzato Eclipse.
________________________________________________________________________________
Quest'opera stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
14