Creare menubar e toolbar

14

Click here to load reader

description

Creazione di una menubar e di una toolbar in Java. I menu e le voci di menu sono associati a scorciatoie da tastiera.

Transcript of Creare menubar e toolbar

Page 1: Creare menubar e toolbar

Componenti swing: i menu______________________________________________________

Gerarchia di classi per i menuLe classi evidenziate in grigio sono impiegate per creare e gestire i menu.

java.lang.Object

java.awt.Com ponent

java.awt.Container

javax.swing.JComponent

javax.swing.JMenuBar javax.swing.AbstractButton

javax.swing.JMenuItem

javax.swing.JMenu

Bocchi CinziaUltimo aggiornamento: 10/11/2011

1

Page 2: Creare menubar e toolbar

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.

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.

Bocchi CinziaUltimo aggiornamento: 10/11/2011

2

La barra del menu

Due menu

Le voci di un menu

un sottomenu

Page 3: Creare menubar e toolbar

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 menuPer 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 menuCreiamo 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 è:

public JMenu(String testodelmenu)

menu = new JMenu (“Unmenu”);

Ora aggiungiamo le voci del menu; i costruttori utilizzabili sono diversi:

public JMenuItem(Icon icon)

public JMenuItem(String text)

Bocchi CinziaUltimo aggiornamento: 10/11/2011

3

Page 4: Creare menubar e toolbar

public JMenuItem(String text, Icon icon)

public JMenuItem(String text, int mnemonic)dove mnemonic è la combinazione di tasti da utilizzare

voce1 = new JMenuItem (“Voce 1”);voce2 = new JMenuItem (“Voce 2”);

Aggiungiamo i componentiAggiungiamo le voci di menu al menu utilizzando il metodo add della classe JMenu:

public Component add(Component c)Aggiunge il componente alla fine del menu. Restituisce il componente aggiunto.

menu.add(voce1); menu.add(voce2);

Aggiungiamo il menu alla barra del menu utilizzando il metodo add della classe JMenuBar:

public JMenu add(JMenu c)Aggiunge il menu specificato al fondo della barra del menu.

menuBar.add(menu);

Aggiungiamo la barra del menu al frameUtilizziamo a tal scopo il metodo setJMenuBar della classe JMenuBar:

public void setJMenuBar(JMenuBar menubar)Imposta la menubar per il frame.

Altri metodi utili di JMenu

Bocchi CinziaUltimo aggiornamento: 10/11/2011

4

Page 5: Creare menubar e toolbar

• public void addSeparator()Aggiunge un separatore.

Altri metodi di JmenuItem

• public void setEnabled(boolean b)Abilita o disabilita le voci di menu.

Esempio: creazione di una menubar

L’esempio crea una menubar con tre menu File, Modifica e Formato, tali che il menu File contiene le voci Nuovo, Apri, Salva, Chiudi, il menu Modifica contiene le voci Taglia, Copia e Incolla, il menu Formato contiene la voce Carattere.

Figura 2. Frame con una menubar

import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import 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 framesuper("Esempio Menu");setSize(WIDTH, HEIGHT);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//componenti del menuJMenuBar menubar = new JMenuBar(); //la menubarJMenu file = new JMenu("File"); //menu FileJMenu modifica = new JMenu("Modifica"); //menu ModificaJMenu formato = new JMenu("Formato"); //menu FormatoJMenuItem nuovo = new JMenuItem("Nuovo"); //item NuovoJMenuItem apri = new JMenuItem("Apri"); //item ApriJMenuItem salva = new JMenuItem("Salva"); //item SalvaJMenuItem chiudi = new JMenuItem("Chiudi"); //item Chiudi

Bocchi CinziaUltimo aggiornamento: 10/11/2011

5

Page 6: Creare menubar e toolbar

JMenuItem taglia = new JMenuItem("Taglia"); //item TagliaJMenuItem copia = new JMenuItem("Copia"); //item CopiaJMenuItem incolla = new JMenuItem("Incolla"); //item IncollaJMenuItem carattere = new JMenuItem("Carattere"); //item Carattere//inserimento degli item nel menu Filefile.add(nuovo);file.add(apri);file.add(salva);file.addSeparator();file.add(chiudi);

//inserimento degli item nel menu Modificamodifica.add(taglia);modifica.add(copia);modifica.add(incolla);

//inserimento degli item nel menu Formatoformato.add(carattere);

//inserimento dei menu nella menubarmenubar.add(file);menubar.add(modifica);menubar.add(formato);

//inserimento della menubar nel framesetJMenuBar(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.

L’alternativa mnemonic consente di utilizzare la tastiera per navigare, aumentando così l’accessibilità. 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.

L’alternativa 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.

Bocchi CinziaUltimo aggiornamento: 10/11/2011

6

Page 7: Creare menubar e toolbar

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);

Per impostare un acceleratore occorre scrivere:

menuItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_T, ActionEvent.ALT_MASK));

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 dall’inserimento di scorciatoie da tastiera.

Figura 3. Frame con una menubar e scorciatoie da tastiera

Bocchi CinziaUltimo aggiornamento: 10/11/2011

7

Page 8: Creare menubar e toolbar

Esempio: utilizzo di scorciatoie da tastiera

import java.awt.event.ActionEvent;import java.awt.event.KeyEvent;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.KeyStroke;@SuppressWarnings("serial")public class MenuFrame extends JFrame {

public static final int WIDTH = 250;public static final int HEIGHT = 150;public MenuFrame(){

//il framesuper("Esempio Menu");setSize(WIDTH, HEIGHT);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//componenti del menuJMenuBar menubar = new JMenuBar(); //la menubarJMenu file = new JMenu("File"); //menu FileJMenu modifica = new JMenu("Modifica"); //menu ModificaJMenu formato = new JMenu("Formato"); //menu FormatoJMenuItem nuovo = new JMenuItem("Nuovo"); //item NuovoJMenuItem apri = new JMenuItem("Apri"); //item ApriJMenuItem salva = new JMenuItem("Salva"); //item SalvaJMenuItem chiudi = new JMenuItem("Chiudi"); //item ChiudiJMenuItem taglia = new JMenuItem("Taglia"); //item TagliaJMenuItem copia = new JMenuItem("Copia"); //item CopiaJMenuItem incolla = new JMenuItem("Incolla"); //item IncollaJMenuItem carattere = new JMenuItem("Carattere"); //item Carattere//mnemonicfile.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);

//acceleratornuovo.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));

Bocchi CinziaUltimo aggiornamento: 10/11/2011

8

Page 9: Creare menubar e toolbar

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 Filefile.add(nuovo);file.add(apri);file.add(salva);file.addSeparator();file.add(chiudi);

//inserimento degli item nel menu Modificamodifica.add(taglia);modifica.add(copia);modifica.add(incolla);

//inserimento degli item nel menu Formatoformato.add(carattere);

//inserimento dei menu nella menubarmenubar.add(file);menubar.add(modifica);menubar.add(formato);

//inserimento della menubar nel framesetJMenuBar(menubar);

}

public static void main(String[] args){MenuFrame frame = new MenuFrame();frame.setVisible(true);

}

}

Barre degli strumenti (toolbar)

Una toolbar è un contenitore che raggruppa diversi componenti, solitamente pulsanti con icone, in una riga o colonna. Generalmente una toolbar consente di accedere più agevolmente a tutte o alcune delle funzionalità presenti nei menu.Per impostazione predefinita, una toolbar può essere trascinata verso un altro lato del suo contenitore o fuori di esso. Per consentire il corretto funzionamento del trascinamento, il contenitore della toolbar deve avere come layout manager BorderLayout. Inoltre, la toolbar deve essere l’unico componente del suo stesso contenitore.

Il codice per creare una toolbar è simile al seguente:

12345

JToolBar toolbar = new JToolBar();Icon icon = new ImageIcon("immagine.gif");JButton b = new JButton(icon);toolbar.add(b);getContentPane().add(toolbar, BorderLayout.NORTH);

Bocchi CinziaUltimo aggiornamento: 10/11/2011

9

Page 10: Creare menubar e toolbar

Rigo 1: crea la toolbar come istanza della classe JToolBar.Rigo 2: crea una icona a partire dall’immagine specificata come parametro (altri formati consentiti: png, jpg).Rigo 3: crea un pulsante con l’icona.Rigo 4: aggiunge il pulsante alla toolbar.Rigo 5: aggiunge la toolbar al contentPane, nell’area 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 all’url 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 all’interno 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"));

Metodi utili della classe JToolBar

• public void setFloatable(boolean b)Se il parametro è false, rende la toolbar non trascinabile in altre aree del contenitore o fuori di esso.

• public void setRollover(boolean rollover)Se il parametro è true, il contorno dei pulsanti viene disegnato solo quando ci si posiziona su di essi con il puntatore del mouse.

• public void addSeparator()Aggiunge un separatore.

Metodi utili della classe JComponent

• public void setToolTipText(String text)Consente di specificare il testo che deve essere visualizzato quando ci si posiziona su di essi con il puntatore del mouse.

Bocchi CinziaUltimo aggiornamento: 10/11/2011

10

Page 11: Creare menubar e toolbar

Esempio: aggiunta di una toolbar

Il seguente esempio mostra come aggiungere una toolbar al frame di figura 3. Il pulsanti della toolbar corrispondono alle voci di menu File>Nuovo, File>Apri, File>Salva, Modifica>Copia, Modifica>Taglia, Modifica>Incolla.I pulsanti del menu File sono separati visivamente da quelli del menu Modifica mediante un separatore. Dotiamo i pulsanti di una funzione rollover e aggiungiamo i tooltip.La toolbar contiene anche una combobox per la scelta del font, che corrisponde alla voce di menu Formato>Carattere.

Figura 4. Frame con menubar e toolbar

import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.KeyEvent;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JToolBar;import 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 framesuper("Esempio Menu");setSize(WIDTH, HEIGHT);setResizable(false);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Bocchi CinziaUltimo aggiornamento: 10/11/2011

11

Page 12: Creare menubar e toolbar

//********************* MENUBAR ***********************************

//componenti del menuJMenuBar menubar = new JMenuBar(); //la menubarJMenu file = new JMenu("File"); //menu FileJMenu modifica = new JMenu("Modifica"); //menu ModificaJMenu formato = new JMenu("Formato"); //menu FormatoJMenuItem nuovo = new JMenuItem("Nuovo"); //item NuovoJMenuItem apri = new JMenuItem("Apri"); //item ApriJMenuItem salva = new JMenuItem("Salva"); //item SalvaJMenuItem chiudi = new JMenuItem("Chiudi"); //item ChiudiJMenuItem taglia = new JMenuItem("Taglia"); //item TagliaJMenuItem copia = new JMenuItem("Copia"); //item CopiaJMenuItem incolla = new JMenuItem("Incolla"); //item IncollaJMenuItem carattere = new JMenuItem("Carattere"); //item Carattere//mnemonicfile.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);

//acceleratornuovo.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 Filefile.add(nuovo);file.add(apri);file.add(salva);file.addSeparator();file.add(chiudi);

//inserimento degli item nel menu Modificamodifica.add(taglia);modifica.add(copia);modifica.add(incolla);

//inserimento degli item nel menu Formato

Bocchi CinziaUltimo aggiornamento: 10/11/2011

12

Page 13: Creare menubar e toolbar

formato.add(carattere);

//inserimento dei menu nella menubarmenubar.add(file);menubar.add(modifica);menubar.add(formato);

//inserimento della menubar nel framesetJMenuBar(menubar);

//********************* TOOLBAR ***********************************

//creazione delle iconeIcon 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 pulsantiJButton 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 comboboxString[] font = {"Arial", "Courier", "Times New Roman", "Verdana"};JComboBox<String> fontList = new JComboBox<String>(font);//creazione della toolbar con pulsanti rolloverJToolBar toolbar = new JToolBar();toolbar.setRollover(true);//inserimento dei pulsanti e della combobox nella toolbartoolbar.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 pulsantinuovoButton.setToolTipText("Nuovo");apriButton.setToolTipText("Apri");salvaButton.setToolTipText("Salva");tagliaButton.setToolTipText("Taglia");copiaButton.setToolTipText("Copia");incollaButton.setToolTipText("Incolla");

Bocchi CinziaUltimo aggiornamento: 10/11/2011

13

Page 14: Creare menubar e toolbar

//inserimento della toolbar nel framegetContentPane().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. L’ide 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.

Bocchi CinziaUltimo aggiornamento: 10/11/2011

14