guida java

24
GUIDA X GUI - JAVA Pag 1 Manuale pratico della 4G Anno scolatico 2009/10 by P. Carrazza 1/24 L’interfaccia grafica con Java L’interfaccia 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 l’interfaccia utente. E’ contenenuta nel package java.awt Il package SWING rappresenta l’evoluzione 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)

description

javadocumnent

Transcript of guida java

Page 1: guida java

GUIDA X GUI - JAVA

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

1/24

L’interfaccia grafica con Java L’interfaccia 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 l’interfaccia utente.

E’ contenenuta nel package java.awt

Il package SWING rappresenta l’evoluzione 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)

Page 2: guida java

GUIDA X GUI - JAVA

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

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: f.setSize ( 100,100);

La posizione : f.setLocation (200,200);

La visibilità : 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);

Page 3: guida java

GUIDA X GUI - JAVA

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

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

Page 4: guida java

GUIDA X GUI - JAVA

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

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

Page 5: guida java

GUIDA X GUI - JAVA

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

Le caselle combinate Le combobox vanno create e poi si aggiungono voci all’oggetto:

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

Page 6: guida java

GUIDA X GUI - JAVA

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

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ò à nell’ultima 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");

f.getContentPane().add(p);

p

p1 p2 p3

Page 7: guida java

GUIDA X GUI - JAVA

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

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 l’altezza del componente

Esempio:

p.setLayout(null);

Button b1=new Button (“OK”);

p.add(b1);

b1.setBounds(50,50,25,25);

Page 8: guida java

GUIDA X GUI - JAVA

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

Costruire queste interfacce Grafiche

Esercizio 1

Esercizio 2

Esercizio 3

Page 9: guida java

GUIDA X GUI - JAVA

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

Per realizzare la gestione degli eventi si deve:

1. Creare uno o più ascoltatori in base agli eventi che si vogliono gestire 2. Registrare l’ascoltatore in un oggetto origine che si vuole controllare 3. Gestire l’evento eseguendo il metodo associato

Creare l’ascoltatore Ogni ascoltatore ha un’interfaccia, esiste l’interfaccia 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 quell’evento. Ogni metodo degli ascoltatori riceve come parametro l’evento che è stato generato.

� public void actionPerformed (ActionEvent e)

{ …… }

Registrazione presso l’origine 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

Page 10: guida java

GUIDA X GUI - JAVA

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

esempio

• b.addActionListener(new MyGestore( ));

oppure MyGestore gest=new MyGestore( );

• b1.addActionListener(gest);

• b2.addActionListener(gest);

Modialità di esecuzione L’interfaccia 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 all’interno del metodo per verificare quale bottone è stato premuto.

Il metodo ActionPerformed riceve come parametro un oggetto di classe ActionEvent. I metodi getActionCommand( ); esempio String s= e.getActionCommand( );

getSource( ); esempio if ( b==e.getSource( )) Ci offrono due possibilità di acquisire informazioni sull’oggetto che ha generato l’evento.

Page 11: guida java

GUIDA X GUI - JAVA

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

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

l’interfaccia 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

Gestione degli eventi in Java Un esempio concreto

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

}

}

MyApp_1.j ava

Ascolta.java

Page 12: guida java

GUIDA X GUI - JAVA

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

Possiamo usare un unico file

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

}

}

MyApp_1.java

Page 13: guida java

GUIDA X GUI - JAVA

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

Il nostro primo clic in Java

Creare un’interfaccia 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 l’origine dell’evento clic del Mouse sempre nel costruttore Es: b.addActionListener(new MyGestore(et)); Scrivo il main della mia classe che consiste nella sola creazione dell’oggetto della classe finestra public static void main (String args[]) {

new MyAppJ1 ( ); } Creo la classe ascoltatore che implementa l’interfaccia ActionListener class MyGestoreJ1 implements ActionListener

Definisco il metodo che realizzerà il cambio dell’etichetta della label attraverso il metodo setText(“Hai cliccato”) public void actionPerformed (ActionEvent e) { et.setText("Hai cliccato!");

}

Page 14: guida java

GUIDA X GUI - JAVA

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

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

}

}

Page 15: guida java

GUIDA X GUI - JAVA

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

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

Page 16: guida java

GUIDA X GUI - JAVA

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

Esercizio 3

Inserire due bottoni: uno colora il pannello di giallo, l’altro 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

Page 17: guida java

GUIDA X GUI - JAVA

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

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

Page 18: guida java

GUIDA X GUI - JAVA

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

Esercizio 7 Ora i numeri dei bottoni si aggiungono uno dopo l’altro nella TextField. Premendo CE la TextField va 0 (zero)

Esercizio 8 Realizziamo ora una semplice calcolatrice Digito un numero, poi un’operazione, un secondo numero, e poi con = ottengo il risultato dell’operazione

Page 19: guida java

GUIDA X GUI - JAVA

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

Conversioni Da stringa ad intero: int num=Integer.parseInt( s );

oppure int num= Integer.valueOf( s ).intValue( ); Da intero a Stringa s=””+num; Se ho tanti bottoni non ho bisogno di istanziare ogni volta lo stesso ascoltatore

Per registrare l’Ascoltatore 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)

{

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

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)

{

Page 20: guida java

GUIDA X GUI - JAVA

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

Alcuni metodi utili

Cambiare il font di un oggetto

Font prova=new Font("Courier",Font.BOLD,16);

ta.setFont(prova);

Modificare l’allinamento 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 l’applicazione insieme alla finestra

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Impedire la scrittura in un oggetto di input

tf.setEditable(false);

Page 21: guida java

GUIDA X GUI - JAVA

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

Inserire un’immagine 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 l’immagine nel pannello

immagine.setIcon(new ImageIcon("Classe3g.jpg"));

Page 22: guida java

GUIDA X GUI - JAVA

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

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à d’Italia Cliccando sul bottone si inserisce nel pannello l’immagine che ha il nome del bottone a cui aggiungo l’estensione .jpg

Per esempio: clicco su Rossi, si inserisce l’immagine rossi.jpg Al contrario di altri programmi java non da errore se il file non è presente.

Page 23: guida java

GUIDA X GUI - JAVA

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

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 (………)

Page 24: guida java

GUIDA X GUI - JAVA

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

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