Corso di Java

(senza pretese)

Lezione sette: altri oggetti da inserire in una finestra [Parte 1]


Menu

Sarete sicuramente abituati ad addentrarvi nei vari menu che qualsiasi programma offre (lo stesso browser che state usando adesso ne usa parecchi) e possiamo fare lo stesso anche sui programmi che creiamo noi. Il procedimento per per creare un menu è semplice e molti intuitivo: si crea una barra dei menu, i menu veri e propri e gli elementi all'interno dei vari menu.
Ecco il codice che permette di creare questi tre elementi:

JMenuBar menubar = new JMenuBar();
//Costruttore barra menu
JMenu menu_file = new JMenu("File");
//Costruttore menu
JMenuItem apri_item = new JMenuItem("Apri");
//Costruttore elemento menu
In questo modo si sono creati una barra (per ora vuota), un menu dal nome "File" e una voce, all'interno di questo menu, dal nome "Apri".
Messe cosi' da sole, queste tre cose non fanno niente. Allora vediamo di organizzare le cose in modo da creare una barra menu:

menu_file.add(apri_item);
//Aggiunge "Apri" al menu "File"
menubar.add(menu_file);
//Aggiunge il menu "File" alla barra menu

Infine basta soltanto inserire la barra all'interno della nostra finestra e il gioco è fatto.
Un menu così però non è molto utile, allora vediamo qualche riga di codice che ci permette di fare un menu con voci utili:

Attenzione: il semplice copia-incolla non funziona. Come spiegherò in una prossima lezione, le menubar e i menu con elementi vanno inseriri in posti differenti all'interno del codice, altrimenti non funziona nulla. Il codice seguente ha il solo scopo di mostrare come si creano gli oggetti e come si mettono l'uno dentro l'altro. Inoltre senza degli actionlistener (spiegherò questi appena finito l'excursus sugli oggetti da inserire in una finestra), non fanno assolutamente nulla!

JMenuBar barramenu = new JMenuBar();

JMenu file = new JMenu("File");
JMenu modifica = new JMenu("Modifica");
JMenu info = new JMenu("?");

JMenuItem apri_item  = new JMenuItem("Apri");
JMenuItem esci_item = new JMenuItem("Esci");
JMenuItem salva_item = new JMenuItem("Salva");
JMenuItem copia_item = new JMenuItem("Copia");
JMenuItem incolla_item = new JMenuItem("Incolla");
JMenuItem guida_item = new JMenuItem("Guida");
JMenuItem about_item = new JMenuItem("About...");

file.add(apri_item);
file.add(salva_item);
file.add(esci_item);
modifica.add(copia_item);
modifica.add(incolla_item);
info.add(guida_item);
info.add(about_item);

barramenu.add(file);
barramenu.add(modifica);
barramenu.add(info);

In questo modo si crea un menu a tre voci (File, Modifica, Guida [?]) con dei sottomenu come quelli dei più comuni programmi.


Box di messaggio

Proprio come quelli che si possono creare per una pagina HTML, anche in Java si possono inserire all'interno di una applicazione dei 'dialog boxes' con varie caratteristiche.
Tutti i vari box fanno parte della classe JOptionPane e quindi per usarli possiamo sia importare tale classe all'inizio del codice oppure chiamare il box tramite questa classe.
Vediamo adesso i quattro tipi di finestre di dialogo:
  1. Confirm dialog
    Sono dei dialog box che pongono una domanda. A tale domanda si può rispondere 'Sì', 'No' e (opzionalmente) 'Annulla'.
    Il modo più semplice per creare uno di questi oggetti è il seguente:
    JOptionPane.showConfirmDialog(null, "Confermi la scelta?");
    

    questo codice crea un semplice confirm box con scelta 'Sì'/'No' che pone la domanda del secondo argomento.
    E qui vi chiederete: "Dove è finito il pulsante 'Annulla'?"
    Allora date un'occhiata a quest'altro modo di creare il solito pannello:
    JOptionPane.showConfirmDialog(null, "Confermi la scelta?",
    "Richiesta conferma", YES_NO_CANCEL_OPTION, QUESTION_MESSAGE);
    

    Adesso vi spiego cosa sono gli altri argomenti che appaiono in questa chiamata di funzione mostrandovi il metodo generico di uso:
    JOptionPane.showConfirmDialog(Component, Object, String, int, int);
    

    Component indica in quale componente deve apparire il box. Se settato su null fa apparire il box al centro dello schermo.

    Object può essere una stringa (come nel nostro esempio), una icona o un qualsiasi componente. Icone e componenti vengono visualizzati al posto del testo.

    String è una stringa cha andrà a settare la caption del box (il messaggio nella barra in alto).

    int (il primo) è un intero che indica il tipo di pulsanti presenti. Per non dover fare i salti mortali per ricordarsi a quale intero sono associate le varie configurazioni sono state definite delle variabili (con il valore intero appropriato) che hanno un nome che richiama l'opzione richiesta (quindi non spaventatevi se vedete YES_NO_OPTION mentre il costruttore richiede un int, poiché YES_NO_OPTION è un intero!).
    I valori disponibili per questo dialog box sono YES_NO_OPTION e YES_NO_CANCEL_OPTION.

    int (il secondo). Vale lo stesso discorso del primo per quanto riguarda il discorso di un 'nome' al posto di un intero. Questo argomento specifica quale icona deve essere visualizzata. I possibili valori sono:
    QUESTION_MESSAGE (icona domanda)
    WARNING_MESSAGE (icona attenzione)
    PLAIN_MESSAGGE (icona messaggio)
    ERROR_MESSAGE (icona errore)
    INFORMATION_MESSAGE (icona infos)

  2. Input dialog
    Sono dei box che accettano un input di testo da parte dell'utente.
    Il costruttore breve è:
    JOptionPane.showInputDialog(null, "Come ti chiami?");
    

    I due argomenti funzionano come quelli per i confirm dialog.
    Il costruttore 'intero' è il seguente:
    JOptionPane.showInputDialog(Component, Object, String, int);
    

    Ed hanno gli stessi significati dei relativi argomenti dei confirm dialog, soltanto che l'unico Int si riferisce al tipo di icona.
    Se li dichiariamo semplicemente così però questi input panel sono privi di utilità, anche perché così non è possibile sfruttare il testo immesso. Allora basta usare un codice simile a questo:
    String nome = JOptionPane.showInputDialog(null, "Come ti chiami?");
    

    così il valore immesso sarà disponibile nella variabile nome.
  3. Message dialog
    Sono box di testo che mostrano un messaggio e un pulsante 'OK' per far sparire il box. I costruttori 'breve' e 'intero' sono identici a quelli degli input panel.
  4. Option dialog
    È la più complicata ma anche la più versatile. Il metodo per crearla è il seguente:
    JOptionPane.showOptionDialog(Component, Object,
    String, int, int, Icon, Object[ ], Object);
    

    Vediamo a cosa servono gli argomenti: Component componente dove appare;
    Object (il primo) stringa, icona o componente da visualizzare come messaggio;
    String stringa della caption;
    int (il primo) serve per indicare il tipo di finestra: YES_NO_OPTION, YES_NO_CANCEL_OPTION oppure 0 (zero) per indicare un diverso set di pulsanti che creerete voi;
    int (il secondo) l'icona;
    Icon un'icona personalizzata da mostrare al posto di quelle standard (specificate nell'argomento precedente);
    Object[ ] array di oggetti (molto frequentemente bottoni) personalizzati da inserire nel caso il primo valore int sia 0;
    Object (l'ultimo) indica l'oggetto (preso tra quelli definiti nell'array precedente) che deve essere selezionato di default (ancora una volta, il primo int deve essere zero).
    Ecco un esempio di come si può realizzare un box di questo tipo:
    JButton set_bottoni[ ] = new JButton[5];
    set_bottoni[0] = new JButton("0-10");
    set_bottoni[1] = new JButton("11-20");
    set_bottoni[2] = new JButton("21-30");
    set_bottoni[3] = new JButton("31-40");
    set_bottoni[4] = new JButton("piu' di 40");
    
    int anni = JOptionPane.showOptionDialog(null,
    "Quanti anni hai?", "Indicazione anni", 0, 
    JOptionPane.QUESTION_MESSAGE, null, 
    set_bottoni, set_bottoni[0]);
    

    Questo codice genera un box di scelta che chiede di specificare l'età dell'utente, usando 5 bottoni per la scelta della fascia d'età, con icona a forma di punto interrogativo e il bottone "0-10" scelto di default.



Prossima pagina

Indice Webdesign