GUIDA X GUI - JAVA
1/24
Linterfaccia grafica con Java
Linterfaccia utente serve per la comunicazione tra utente e programma Distinguiamo le interfacce tra quelle a caratteri e quelle grafiche
Le GUI (Graphical user interface) sono quelle composte da finestre bottoni icone immagini In Java AWT (Abstract Window Toolkit) la parte che si occupa di gestire linterfaccia utente. E contenenuta nel package [Link] Il package SWING rappresenta levoluzione di AWT nella costruzione delle interfacce porta grafiche. Si importa con [Link]
Su cosa si basa una interfaccia grafica?
Sui Componenti (bottoni, etichette, aree di testo etc) Sui contenitori (la finestra, il pannello etc) altri oggetti di supporto (Gestori di Layout, Gestori di eventi)
Pag 1
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Package AWT Il Contenitore Frame La finestra si realizza tramite la classe Frame Frame f = new Frame (Primo Programma); oppure Frame f = new Frame( ); Metodi per modificare la finestra: La dimensione: La posizione : La visibilit : [Link] ( 100,100); [Link] (200,200); [Link] (true);
Il Contenitore Panel E un contenitore intermedio rispetto al Frame. Dentro una Frame ci possono essere pi Panel Si realizza con Panel p = new Panel ( ); Il metodo add aggiunge componenti al Panel o al Frame oppure Panel al Frame in questo modo: [Link](p);
per colorare un pannello si usa questo metodo: [Link]([Link]);
Pag 2
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
I componenti di AWT
Le etichette
Ecco la Label con 3 possibili costruttori: Label( ); Label(Ciao); Label(Ciao,[Link]); Creare una etichetta, aggiungerla Cambiare i colori alle etichette: Label et= new Label( ); [Link]([Link]); [Link]([Link]);
I bottoni
Button( ); Button(Premi); Creare un Bottone, disabilitarlo, abilitarlo: Button b1 = new Button (OK); [Link](true); [Link](false);
Pag 3
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Le Caselle di testo
La creo con: TextField tf=new TextField( ); Ha 4 tipi di costruttori: TextField( ); TextField(inserisci); TextField( 10); TextField(inserisci,10); Ha 3 metodi importanti: esempio: [Link](cognome); s=[Link]( ); [Link](false);
Le aree di testo
Creazione: TextArea ta = new TextArea( ); Ha 4 costruttori: TextArea( ); TextArea(5,10 ); TextArea(Prima Riga ); TextArea(Prima Riga ,5,10,SCROLLBARS_BOTH); E i metodi: setText( ); getText( ); setEditable(true); append(nuova riga);
Pag 4
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Le caselle combinate
Le combobox vanno create e poi si aggiungono voci alloggetto:
Choice cb= new Choice( ); ATTENZIONE: Choice in AWT, in SWING la classe JComboBox
Metodo per aggiungere nella tendina:
[Link](rosso); [Link](verde); [Link](bianco);
Metodo per acquisire la scelta selezionata:
Int x=getSelectedItem ( );
Metodo per selezionare una voce della tendina:
Int x=setSelectedItem ( 5); String x=setSelectedItem ( Rosso);
Pag 5
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Layout degli elementi grafici
I componenti grafici vengono aggiunti al Frame o ad un Panel, ma come si dispongono dipende dal LayoutManager
Tre tipi di Layout
FlowLayout BorderLayout GridLayout
Esempi:
dopo Panel p =new Panel( ) scelgo quale setLayout il piu adatto alla mia finestra [Link](new FlowLayout()); [Link](new BorderLayout()); [Link](new GridLayout(3,2,10,10));
Con il Package swing la gestione del Panel diversa:
Vediamolo con un esempio completo, la differenza per nellultima riga: JPanel p =new JPanel(); JPanel p1=new JPanel(); JPanel p2=new JPanel(); JPanel p3=new JPanel(); [Link](new BorderLayout()); [Link](bottone); [Link](campotesto); [Link](testoarea); [Link](p1,"West"); [Link](p2,"Center"); [Link](p3,"East");
p p1 p2 p3
[Link]().add(p);
Pag 6
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA Posizionamento assoluto della finestra
Si pu disattivare il LayoutManager con [Link](null);
e impostare la posizione assoluta nel componente nella finestra. Ma in questo caso consigliabile disattivare il ridimensionamento della finestra
setBounds(100,100,10,10) indica la posizione x y del componente, la larghezza e laltezza del componente Esempio: [Link](null); Button b1=new Button (OK); [Link](b1); [Link](50,50,25,25);
Pag 7
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Costruire queste interfacce Grafiche
Esercizio 1
Esercizio 2
Esercizio 3
Pag 8
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Per realizzare la gestione degli eventi si deve:
1. Creare uno o pi ascoltatori in base agli eventi che si vogliono gestire 2. Registrare lascoltatore in un oggetto origine che si vuole controllare 3. Gestire levento eseguendo il metodo associato Creare lascoltatore Ogni ascoltatore ha uninterfaccia, esiste linterfaccia delle finestre (WindowListener), dei bottoni (ActionListener), del Mouse (MouseListener), e della Tastiera (KeyListener ) La parola chiave implements specifica che la classe implementa una particolare interfaccia class MyGestore implements ActionListener Le interfacce che gestiscono gli eventi sono contenute nel package import [Link].* ; E obbligatorio che tutti i metodi di un ascoltatore siano presenti anche se vuoti, (in quanto metodi astratti), essi contengono le istruzioni da eseguire se accade quellevento. Ogni metodo degli ascoltatori riceve come parametro levento che stato generato. public void actionPerformed (ActionEvent e) { } Registrazione presso lorigine Predisposti gli ascoltatori, si devono scegliere gli oggetti origine, cio quegli oggetti che possono generare un evento e ai quali si vuole associare una risposta. Ogni componente ha i metodi per registrare un particolare ascoltatore: per i bottoni addActionListener per le finestre addWindowListener
Pag 9
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
esempio [Link](new MyGestore( )); oppure MyGestore gest=new MyGestore( ); [Link](gest); [Link](gest);
Modialit di esecuzione
Linterfaccia Action Listener contiene un solo metodo astratto che deve essere ridefinito: actionPerformed( ) Siccome possono esistere pi bottoni che generano un evento si puo fare riferimento allo stesso ascoltatore ed eseguire un controllo allinterno del metodo per verificare quale bottone stato premuto. Il metodo ActionPerformed riceve come parametro un oggetto di classe ActionEvent. I metodi getActionCommand( ); getSource( ); esempio String s= [Link]( ); esempio if ( b==[Link]( ))
Ci offrono due possibilit di acquisire informazioni sulloggetto che ha generato levento.
Pag 10
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Gestione degli eventi in Java
Un esempio concreto
MyApp_1.j ava
import [Link].*; import [Link].*; import [Link].*; public class MyApp_1 extends JFrame { public MyApp_1 ( ) { crea_interfaccia_grafica; [Link] (new Ascolta ( )); } public class void main (String args[]) { new MyApp_1 ( ); } }
[Link]
public class Ascolta implements ActionListener { private . public Ascolta ( ) { } public void actionPerformed( Action Event e) { [Link](hai premuto + [Link]( )); } }
MyApp_1 il programma Ascolta la classe ascoltatore che implementa linterfaccia ActionListener X il bottone che genera l evento e viene descritto in actionPerformed Cliccando sul bottone viene stampata la scritta che descrive il bottone stesso. Lo facciamo attraverso il metodo actionPerformed e il metodo getActionCommand
Pag 11
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Possiamo usare un unico file
MyApp_1.java
import [Link].*; import [Link].*; import [Link].*; public class MyApp_1 extends JFrame { public MyApp_1 ( ) { crea_interfaccia_grafica; [Link] (new Ascolta ( )); setVisible(true); } public class void main (String args[]) { new MyApp_1 ( ); } } class Ascolta implements ActionListener { private . public Ascolta ( ) { } public void actionPerformed( Action Event e) { [Link](hai premuto + [Link]( )); } }
Pag 12
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Il nostro primo clic in Java
Creare uninterfaccia grafica con un bottone e una label. Cliccando sul bottone, al posto di Ancora niente compare Hai cliccato La finestra si disegna nel costruttore della classe MyAppl Registro lorigine dellevento clic del Mouse sempre nel costruttore Es: [Link](new MyGestore(et));
Scrivo il main della mia classe che consiste nella sola creazione delloggetto della classe finestra public static void main (String args[]) { new MyAppJ1 ( ); } Creo la classe ascoltatore che implementa linterfaccia ActionListener class MyGestoreJ1 implements ActionListener Definisco il metodo che realizzer il cambio delletichetta della label attraverso il metodo setText(Hai cliccato) public void actionPerformed (ActionEvent e) { [Link]("Hai cliccato!"); }
Pag 13
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Il Programma completo
import [Link].*; import [Link].*; import [Link].*; public class MyAppJ1 extends JFrame { MyAppJ1( ) { JFrame f=new JFrame ("My Applicazione 1"); JPanel p=new JPanel(); JLabel et=new JLabel ("Ancora niente"); JButton b=new JButton ("Premi Bottone"); [Link](b); [Link](et); [Link]([Link]); [Link]([Link]); [Link]([Link]); [Link]().add(p); //[Link](p); [Link](300,200); [Link](0,0); [Link](JFrame.EXIT_ON_CLOSE); [Link](new MyGestore(et)); [Link](true); } public static void main (String args[]) { new MyAppJ1 ( ); } } class MyGestore implements ActionListener { private JLabel et; public MyGestore (JLabel et) { [Link]=et; } public void actionPerformed (ActionEvent e) {
[Link]("Hai cliccato!");
[Link]([Link]());
} }
Pag 14
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Esercizio 1
Cliccando sul bottone, nel text field viene sostituita la scritta ancora niente con Hai cliccato!
Esercizio 2
Cliccando sul bottone, nel text field viene conteggiato il numero di clic
Pag 15
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Esercizio 3
Inserire due bottoni: uno colora il pannello di giallo, laltro di rosso, nel textfield compare il nome del bottone cliccato
Esercizio 4
Collocare un bottone, un textField e una textArea. Scrivendo nel textfield e cliccando sul bottone la textArea si riempie una riga alla volta e la textField si svuota dopo ogni clic
Pag 16
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Esercizio 5
Inserire una Label, una combobox con un certo numero di colori, un bottone. Apro la combobox, scelgo il colore, clicco sul bottone e il pannello cambia colore
Esercizio 6
Disegnare la calcolatrice con i 12 bottoni e la TextField. Cliccando sui bottoni, nella textField compare il numero corrispondente. Ma ogni clic sostituisce il numero precedente. Il numero allineato a destra, la cornice del textfield pi spessa, il carattere Arial size 12
Pag 17
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Esercizio 7
Ora i numeri dei bottoni si aggiungono uno dopo laltro nella TextField. Premendo CE la TextField va 0 (zero)
Esercizio 8
Realizziamo ora una semplice calcolatrice Digito un numero, poi unoperazione, un secondo numero, e poi con = ottengo il risultato delloperazione
Pag 18
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Conversioni
Da stringa ad intero: oppure Da intero a Stringa int num=[Link]( s ); int num= [Link]( s ).intValue( ); s=+num;
Se ho tanti bottoni non ho bisogno di istanziare ogni volta lo stesso ascoltatore
Per registrare lAscoltatore
Se ho tanti bottoni non ho bisogno di istanziare ogni volta lo stesso ascoltatore
JButton b9=new JButton ("9"); JButton b8=new JButton ("8"); JButton b7=new JButton ("7"); JButton b6=new JButton ("6"); JButton b5=new JButton ("5"); JButton b4=new JButton ("4"); JButton b3=new JButton ("3"); JButton b2=new JButton ("2"); JButton b1=new JButton ("1"); . . [Link](new MyGestore(tf)); [Link](new MyGestore(tf)); [Link](new MyGestore(tf)); [Link](new MyGestore(tf)); [Link](new MyGestore(tf)); [Link](new MyGestore(tf)); [Link](new MyGestore(tf)); [Link](new MyGestore(tf)); [Link](new MyGestore(tf)); [Link](new MyGestore(tf)); ...... class MyGestore implements ActionListener { JTextField tf; public MyGestore (JTextField tf) { [Link]=tf; } public void actionPerformed (ActionEvent e) { MyGestore gest = new MyGestore(tf); [Link](gest); [Link](gest); [Link](gest); [Link](gest); [Link](gest); [Link](gest); [Link](gest); [Link](gest); [Link](gest); [Link](gest); .. class MyGestore implements ActionListener { JTextField tf; public MyGestore (JTextField tf) { [Link]=tf; } public void actionPerformed (ActionEvent e) { JButton b9=new JButton ("9"); JButton b8=new JButton ("8"); JButton b7=new JButton ("7"); JButton b6=new JButton ("6"); JButton b5=new JButton ("5"); JButton b4=new JButton ("4"); JButton b3=new JButton ("3"); JButton b2=new JButton ("2"); JButton b1=new JButton ("1");
Pag 19
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Alcuni metodi utili
Cambiare il font di un oggetto
Font prova=new Font("Courier",[Link],16); [Link](prova);
Modificare lallinamento di un oggetto
[Link]([Link]); [Link]([Link]);
Cambiare i colori di un oggetto
[Link]([Link]); [Link]([Link]);
Chiudere lapplicazione insieme alla finestra
[Link](JFrame.EXIT_ON_CLOSE);
Impedire la scrittura in un oggetto di input
[Link](false);
Pag 20
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Inserire unimmagine con Java
Creo un oggetto JLabel che chiamo per esempio immagine
private JLabel immagine=new JLabel();
Lo inserisco in un panello
[Link](immagine);
Utilizzo il metodo setIcon e la classe ImageIcon per inserire limmagine nel pannello
[Link](new ImageIcon("[Link]"));
Pag 21
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Esercizio
Creare tanti bottoni quante sono le immagini che hai in memoria (hard disk) relative a: gli studenti della classe oppure i giocatori della tua squadra oppure le citt dItalia Cliccando sul bottone si inserisce nel pannello limmagine che ha il nome del bottone a cui aggiungo lestensione .jpg Per esempio: clicco su Rossi, si inserisce limmagine [Link] Al contrario di altri programmi java non da errore se il file non presente.
Pag 22
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA
Creare un programma a Men con Java
Le classi con cui gestisco il menu sono:
JMenuBar JMenu JMenuItem
JMenuBar
la barra su cui appoggio le voci del menu : File Modifica Formato .. La dichiaro con JMenu barra = new JMenuBar(); e al termine la inserisco con [Link](barra)
JMenu
JMenu menu poi menu=new JMenu(File); [Link](menu); inserisco File nella barra del menu ed ora le voci che compongono File: Nuovo Apri Salva etc:
JMenuItem
JMenuItem voce voce=new MenuItem(Nuovo); [Link](voce); [Link](this); proseguo poi con il menu Modifica menu=new JMenu(Modifica); [Link](menu); e le voci del menu Modifica ()
Pag 23
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza
GUIDA X GUI - JAVA Le import da utilizzare
import [Link].*; import [Link].*; import [Link].*; import [Link].*; import [Link].*; import [Link].*;
Come collocare un file di testo in una TextArea
int status = [Link](this); if (status==JFileChooser.APPROVE_OPTION) { try { File f = [Link](); FileReader x=new FileReader(f); [Link](x,null); setTitle([Link]()); } catch (IOException ev) { } }
Come salvare una TextArea in un file di testo
int status = [Link](this); if (status==JFileChooser.APPROVE_OPTION) { try { File f = [Link](); FileWriter x=new FileWriter(f); [Link](x); setTitle([Link]()); } catch (IOException ev) { } } fch un oggetto dichiarato: private JFileChooser fch = new JFileChooser();
Pag 24
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza