Vous êtes sur la page 1sur 24

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 java.awt Il package SWING rappresenta levoluzione di AWT nella costruzione delle interfacce porta grafiche. Si importa con javax.swing

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 : f.setSize ( 100,100); f.setLocation (200,200); f.setVisible (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: f.add(p);

per colorare un pannello si usa questo metodo: p.setBackground(Color.red);

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,Label.LEFT); Creare una etichetta, aggiungerla Cambiare i colori alle etichette: Label et= new Label( ); et.setBackGround(Color.red); et.setForeGround(Color.yellow);

I bottoni
Button( ); Button(Premi); Creare un Bottone, disabilitarlo, abilitarlo: Button b1 = new Button (OK); b1.setEnabled(true); b1.setEnabled(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: tf.setText(cognome); s=tf.getText( ); tf.setEditable(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:

cb.addItem(rosso); cb.addItem(verde); cb.addItem(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 p.setLayout(new FlowLayout()); p.setLayout(new BorderLayout()); p.setLayout(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(); p.setLayout(new BorderLayout()); p1.add(bottone); p2.add(campotesto); p3.add(testoarea); p.add(p1,"West"); p.add(p2,"Center"); p.add(p3,"East");

p p1 p2 p3

f.getContentPane().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 p.setLayout(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: p.setLayout(null); Button b1=new Button (OK); p.add(b1); b1.setBounds(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 java.awt.event.* ; 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 b.addActionListener(new MyGestore( )); oppure MyGestore gest=new MyGestore( ); b1.addActionListener(gest); b2.addActionListener(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= e.getActionCommand( ); esempio if ( b==e.getSource( ))

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 java.awt.*; import javax.swing.*; import java.awt.event.*; public class MyApp_1 extends JFrame { public MyApp_1 ( ) { crea_interfaccia_grafica; x.addActionListener (new Ascolta ( )); } public class void main (String args[]) { new MyApp_1 ( ); } }

Ascolta.java

public class Ascolta implements ActionListener { private . public Ascolta ( ) { } public void actionPerformed( Action Event e) { System.out.println(hai premuto + e.getActionCommand( )); } }

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 java.awt.*; import javax.swing.*; import java.awt.event.*; public class MyApp_1 extends JFrame { public MyApp_1 ( ) { crea_interfaccia_grafica; x.addActionListener (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) { System.out.println(hai premuto + e.getActionCommand( )); } }

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: b.addActionListener(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) { et.setText("Hai cliccato!"); }

Pag 13
Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza

GUIDA X GUI - JAVA


Il Programma completo

import java.awt.*; import java.awt.event.*; import javax.swing.*; 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"); p.add(b); p.add(et); et.setBackground(Color.yellow); et.setForeground(Color.blue); p.setBackground(Color.yellow); f.getContentPane().add(p); //f.add(p); f.setSize(300,200); f.setLocation(0,0); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); b.addActionListener(new MyGestore(et)); f.setVisible(true); } public static void main (String args[]) { new MyAppJ1 ( ); } } class MyGestore implements ActionListener { private JLabel et; public MyGestore (JLabel et) { this.et=et; } public void actionPerformed (ActionEvent e) {

et.setText("Hai cliccato!");
System.out.println(e.getActionCommand());

} }

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=Integer.parseInt( s ); int num= Integer.valueOf( 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"); . . b0.addActionListener(new MyGestore(tf)); b1.addActionListener(new MyGestore(tf)); b2.addActionListener(new MyGestore(tf)); b3.addActionListener(new MyGestore(tf)); b4.addActionListener(new MyGestore(tf)); b5.addActionListener(new MyGestore(tf)); b6.addActionListener(new MyGestore(tf)); b7.addActionListener(new MyGestore(tf)); b8.addActionListener(new MyGestore(tf)); b9.addActionListener(new MyGestore(tf)); ...... class MyGestore implements ActionListener { JTextField tf; public MyGestore (JTextField tf) { this.tf=tf; } public void actionPerformed (ActionEvent e) { MyGestore gest = new MyGestore(tf); b0.addActionListener(gest); b1.addActionListener(gest); b2.addActionListener(gest); b3.addActionListener(gest); b4.addActionListener(gest); b5.addActionListener(gest); b6.addActionListener(gest); b7.addActionListener(gest); b8.addActionListener(gest); b9.addActionListener(gest); .. class MyGestore implements ActionListener { JTextField tf; public MyGestore (JTextField tf) { this.tf=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",Font.BOLD,16); ta.setFont(prova);

Modificare lallinamento di un oggetto


tf.setHorizontalAlignment(SwingConstants.CENTER); tf.setHorizontalAlignment(SwingConstants.RIGHT);

Cambiare i colori di un oggetto


p1.setBackground(Color.red); p1.setForeground(Color.yellow);

Chiudere lapplicazione insieme alla finestra


f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Impedire la scrittura in un oggetto di input


tf.setEditable(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
p2.add(immagine);

Utilizzo il metodo setIcon e la classe ImageIcon per inserire limmagine nel pannello
immagine.setIcon(new ImageIcon("Classe3g.jpg"));

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 rossi.jpg 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 this.setJMenuBar(barra)

JMenu
JMenu menu poi menu=new JMenu(File); barra.add(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); menu.add(voce); voce.addActionListener(this); proseguo poi con il menu Modifica menu=new JMenu(Modifica); barra.add(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 java.awt.*; import java.awt.event.*; import javax.swing.text.*; import java.io.*; import javax.swing.*; import java.util.*;

Come collocare un file di testo in una TextArea


int status = fch.showOpenDialog(this); if (status==JFileChooser.APPROVE_OPTION) { try { File f = fch.getSelectedFile(); FileReader x=new FileReader(f); testo.read(x,null); setTitle(f.getName()); } catch (IOException ev) { } }

Come salvare una TextArea in un file di testo


int status = fch.showSaveDialog(this); if (status==JFileChooser.APPROVE_OPTION) { try { File f = fch.getSelectedFile(); FileWriter x=new FileWriter(f); testo.write(x); setTitle(f.getName()); } 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