Paola Magillo, Univestita' di Genova, Corso di Programmazione II per SMID, a.a. 2008-2009.

Laboratorio 03:

INTERFACCE GRAFICHE

Considerare l'esempio SwingExample visto a lezione. Compilare ed eseguire.

Modificare il programma nel seguente modo: l'etichetta mostra un mese dell'anno (es. inizialmente "gennaio") e ogni volta che l'utente azione il bottone passa al mese seguente in modo ciclico (cioe' dopo dicembre si torna a gennaio).
Suggerimento: fare un array di 12 stringhe e tenere l'indice del mese corrente in questo array.
Sintassi per fare array di stringhe:

    private static String[] mese =
    { "gennaio", "febbraio", ........ "dicembre" };

Considerare l'esempio ExLayout visto a lezione sui layout manager. Compilare ed eseguire.
Per eseguire, digitare sulla linea di comando:

Modificare ancora il programma SwingExample mettendo due bottoni, uno per andare avanti e uno per andare indietro nell'elenco dei mesi.
Dare alla finestra questa configurazione:

+--------+--------+
|indietro| avanti |
+--------+--------+
| .mese corrente. |
+-----------------+
Suggerimento: usare una gerarchia di contenimento a due livelli. La finestra principale ha un layout griglia 2 righe x 1 colonna. Nella seconda riga c'e' la label. Nella prima riga c'e' un contenitore intermedio (classe JPanel, si crea con "new JPanel()") con layout griglia 1 riga x 2 colonne. Dentro questo contenitore intermedio ci sono i due bottoni. E questo contenitore e' nel pannello di contenuto della finestra,
                  +---------+
                  | JFrame  |
                  +---------+
                        |
        +--------------------------------+
        | content panel (GridLayout 2x1) |
        +--------------------------------+
              /                  \
+-------------------------+     +---------+
| JPanel (GridLayout 1x2) |     | JLabel  |
+-------------------------+     +---------+
     /            \
+----------+  +----------+
| JButton  |  | JButton  |
+----------+  +----------+

Considerare l'esempio ExJLabel visto a lezione, e provare i vari tipi di etichette (stringa, icona, stringa e icona).

Nell'esercizio precedente rendere i due bottoni per andare avanti e indietro con due icone a frecce. Come immagini potete usare quella usata in questa pagina (scarica freccia.gif) e la sua inversa (scarica freccia2.gif), i file con le immagini vanno salvati nella stessa directory dove sono i file java.

Guardate anche gli altri esempi visti nella lezione 8.

Considerare l'esempio Ex3Buttons con i vari tipi di bottoni, visto a lezione. Provare ad aggiungere callback che stampano semplicemente la stringa presente sul bottone.

Suggerimento: si consiglia di procedere per gradi.

GRADO 1

Associare a tutti i bottoni solo un action listener (i bottoni a due stati sarebbero sensibili anche a item event). Associare a tutti lo stesso listener, che esegue le seguenti istruzioni:

  1. prende l'oggetto su cui e' avvenuto l'evento (chiamando il metodo getSource() sull'evento),
  2. lo converte forzatamente a oggetto di classe AbstractButton (sotto-classe di JComponent e super-classe di tutte e tre le classi di bottoni)
  3. da tale oggetto ricava il testo con la funzione getText()
  4. da tale oggetto ricava anche il nome della classe di bottone con getClass().getName()
  5. stampa il nome della classe + il testo (viene qualcosa come per es. "JRadioButton tre" ecc.)
Si puo' associare a tutti i bottoni proprio lo stesso oggetto action listener in questo modo:
  1. crearlo a parte e memorizzarlo in una variabile
    ActionListener l = new ActionListener() { ...implementazione di actionPerformed... };
  2. per ogni bottone di tutti i tipi (con un ciclo) chiamare sul bottone addActionListener(l);

GRADO 2

Associare, invece di un action listener, un item listener ai bottoni che sono sensibili a questo tipo di evento (JCheckBox e JRadioButton).
Tale listener, oltre a tipo del bottone e stringa presente sul bottone, deve stampare anche se il bottone passa da non selezionato a selezionato oppure viceversa.
Vedere dispense per ItemEvent e ItemListener.