AWT: Abstract Window Toolkit



Documenti analoghi
F 2. q 2. u R12 F 1. q 1


¼»»»²»æͪ± ½«ò Ý º» ݱ¼ ½±² æ ² ± ±µ



INDICE ( $ 1 $ ( +. 0 & % 2 + % & %! + ' # 0 '. / + '! '! " ## %.. 1 & + #.. & #. " + + ) * % # $ ' ( - $ % & '


л ½±³» 8 ½ ²± ³ « ³ ²±² ½«²»ºº» ± «±½½«±²» λ² 8 Ð ± Ý ¹ ± ³³» ± Ó ½ ±²²» ¼» ݱ² ¹ ± Ô ¾¾ ³± ³» ½» ± ± º»»² «½ ó

Gestione degli eventi in Java


INTERFACCIA DTE/DCE P1 P2 P3 LIVELLO PACCHETTO LIVELLO TRAMA DTE LIVELLO FISICO DCE M LIVELLO FISICO LIVELLO TRAMA LIVELLO PACCHETTO DTE A PACCHETTO


Eventi e listener per i componenti grafici

L Abstract Windowing Toolkit. Le GUI in Java. Il Frame. Cenni sull ereditarietà. Gianpaolo Cugola - Sistemi Informativi in Rete

Riassunto. GUI in Java con l AWT 1. Cos è una GUI. Oggi: GUI in Java, l AWT. GUI in Java. Un esempio. Stefano Mizzaro 1


I Layout Manager di java. Prof. Francesco Accarino IIS Altiero Spinelli via Leopardi 132 Sesto san Giovanni

Riassunto. GUI in Java con l AWT 1. Oggi: GUI in Java, l AWT. Oggi. GUI in Java. Cos è una GUI. Stefano Mizzaro 1

Corso sul linguaggio Java

Introduzione alla programmazione con linguaggio Java {Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F.

! GUI in Java: AWT. ! Concetti: ! Componenti. ! Eventi. ! Ascoltatori. ! (Layout) ! Documentazione. ! Libri, Fotocopie. !

Riassunto. GUI in Java con l AWT 2


Eventi di azione. // con interfaccia per eventi di azione

Interfacce. Un interfaccia Java è una collezione di metodi astratti (e di costanti) Un metodo astratto è un metodo non implementato

Unità B2 Gestione eventi 2

L interfaccia grafica con Java

Interfacce grafiche (GUI)

GUI e java swing. Elmenti della GUI. Eventi e listener contenitori componenti layout manager. caratteristiche speciali

Corso sul linguaggio Java

Riassunto. GUI in Java con l AWT 2

Programmazione in rete e laboratorio

Grafica in Java. introduzione

I Canvas. import java.awt.*; import javax.swing.*; public class Graf{ public Graf () { JFrame f = new JFrame("Finestra"); // crea frame invisibile

INTERFACCE GRAFICHE IN JAVA CON SWING DISPENSE

Corso sul linguaggio Java

maggio 2004 Stefano Sanna - gerda@crs4.it

Java SE 6. Programmazione grafica (3)

L interfaccia grafica in Java

! Programmazione strutturata. ! OO: TDA, scambio messaggi, eredità, polimorfismo, OO in Java. ! Rassegna API. ! Documentazione Javadoc delle API

Programmazione in rete e laboratorio

Corso sul linguaggio Java

PLCE: Partizione PLC Criptata Esempio di implementazione della funzione

Paradigmi di programmazione (sperimentazioni)

GUI e AWT 12/05/2003. z GUI. z GUI in Java: l AWT. z Esempi. z Principi alla base. z Da fare e da non fare. Stefano Mizzaro - GUI e AWT 2/37

Java Interfaccia Grafica

Esercitazione n 6. Capacità di analisi e di estensione di progetti Componenti grafici e gestione di eventi Linguaggio Java:

La nostra finestra dovrebbe essere come mostra la figura: Diamo innanzitutto un occhiata alle componenti principali di input/output:

Grafica ed eventi. Più movimento alle classi

Corso sul linguaggio Java

Le Applet Java. Le Applet

Gerarchie di Tipi. Gerarchie di tipi. Ogni classe può. I due meccanismi si possono combinare

interfacce ed eventi intercettare il mouse ed altri eventi

Campo Minato. in java

Lezione n.12 LPR Informatica Applicata GUI programming

Corso sul linguaggio Java

Programmazione ad Oggetti. JFrame è la classe di base per le finestre Fornisce tutte le caratteristiche di una finestra vuota

Applet 21/05/2003. z Gli applet. z Eventi del mouse. z Choice. z Menu. Stefano Mizzaro - Applet 2/25. z Da sovrascrivere per creare i nostri applet

JFrame. Chiusura della finestra. JFrame - Esempio. Tipologia di GUI. Linee guida. Programmazione ad Oggetti 6/12/09. finestre

Sviluppo di Interfacce Grafiche in Java

Corso sul linguaggio Java

Raffaella Brighi, a.a. 2005/06. Eventi e listener. Corso di Laboratorio II. A.A

Classi astratte. Master in Web Technology e Security luglio - settembre Interfacce

Applicazioni grafiche e finestre

5Convegno a Milano. Occupazione e potere d acquisto di pensioni e retribuzioni.

La sintassi di XML può essere definita dall utente a seconda del tipo di documento da creare.

APPLICAZIONI & APPLET

A. Ferrari. AWT e Swing. Java. Alberto Ferrari Informatica

Java Interfaccia Grafica

Appendice B:Interfacce Grafiche

Alessandro De Luca. Lezione, 13 maggio 2015

D Servizi Territoriali Est Trentino S.p.A. (STET S.p.A.) I Viale Venezia n. 2/e

Gestione dell interattività: gli eventi

Marco Faella Elementi di programmazione di interfacce Grafiche. Il pattern OBSERVER.

Controllo del layout. Per disporre in modo più strutturato utilizziamo pannelli con diverse politiche di disposizione (layout)

PARTE PRIMA - MORFOLOGIA 1. ALFABETO E FONETICA

GRAFICA ED EVENTI SWING, AWT e JavaFX

Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM

Corso sul linguaggio Java

Interazioni col mondo: eventi

Java GUI. Swing Java

GESTIONE DEGLI ERRORI

Application VS Applet

GESTIONE DEGLI ERRORI


7869/ H 160 CM 16 LIGHTS CRISTALLO MULTICOLOR ORO / CRYSTAL MULTICOLOR GOLD

Java terzo contatto. Swing Java

component - container - layout

Le basi della grafica in Java. Prof. Francesco Accarino IIS Altiero Spinelli via Leopardi 132 Sesto san Giovanni

Esempi di programmazione

Introduzione al package grafico Swing

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Prova d Esame Compito A

Prova d Esame Compito A

Gestione di eventi ed interfacce utente grafiche

PROVA FINALE Ingegneria del software

Prof. Pagani Corrado ESERCITAZIONI JAVA

Pag. 1 di 5. private Color C0 = new Color(255, 0, 0);

Swing. Swing 1. Java e la grafica Java permette di realizzare agevolmente applicazioni grafiche Package java.awt

Transcript:

AWT: Abstract Window Toolkit E una libreria che offre le componenti GUI essenziali Tutte le componenti GUI che sono visualizzabili sono sottoclassi della classe astratta Component Container è una sottoclasse astratta di Component che permette ad altre componenti di essere annidate all interno di essa. Le sottoclassi più significative di Container sono Panel Window La gerarchia di classi in java.awt CheckboxGroup TextField Event TextComponent TextArea Object Component Graphics Checkbox Container Label Button Panel Window Applet Frame Dialog Font List Color Choice Canvas Scrollbar! " # $ % & " ' # " ( # % $ % ) * +, + *, # % " $, -. / ( 0 " #, 1 2 Page 1

I Componenti e relative classi java.awt.button pulsanti per generare una qualche azione java.awt.checkbox pulsanti con valore booleano on/off java.awt.textfield per ricevere input dalla tastiera (1 linea) java.awt.textarea aree più grande per display ed editing java.awt.label etichette (sola lettura) java.awt.list per selzionare una opzione in una serie proposta java.awt.choice idem, ma solo una visibile per volta java.awt.scrollbar java.awt.canvas area di disegno java.awt.menu, java.awt.menuitem, java.awt.checkboxmenuitem java.awt.panel java.awt.window Metodi di base per queste Componenti: add e remove 3 4 5 6 7 8 9 : ; < 8 = 6 9 8 > 6 9 ; 6 : ;? @ A B A @ B 9 ; 8 : B C D 6 E > F 8 9 B G 4 G Window E un oggetto di java.awt.window Una window è una finestra autonoma sullo schermo, che è indipendente da altri contenitori Ci sono due tipi di finestre: I frame: finestra con titolo e angoli di ridimensionamento dialog: finestra senza barra di menu. Può essere spostata ma non ridimensionata 3 4 5 6 7 8 9 : ; < 8 = 6 9 8 > 6 9 ; 6 : ;? @ A B A @ B 9 ; 8 : B C D 6 E > F 8 9 B G 4 H Page 2

Frames Il costruttore Frame(String) nella classe Frame crea un nuovo oggetto, invisibile, con il titolo specificato da String. Tutti i componenti del frame devono essere aggiunti quando non è ancora visibile Il frame deve essere dimensionato (in pixel): per default ha dimensione 0x0, e quindi è invisibile Poi, il frame viene reso visibile chiamando il metodo setvisible(true) oppure il metodo show(). J K L M N O P Q R S O T M P O U M P R M Q R V W X Y X W Y P R O Q Y Z [ M \ U ] O P Y ^ K _ Esempio di frame public class MiaFrame extends Frame{ MiaFrame f = new MiaFrame( Ciao! ); f.setsize(200,300); f.setbackground(color.red); f.setvisible(true); public MiaFrame (String linea){ super(linea); Eseguendolo, compare una finestra rossa con titolo Ciao, di dimensione 200x300 pixels Attenzione: questa finestra non può essere distrutta che con Ctrl-Alt-Del ` a b c d e f g h i e j c f e k c f h c g h l m n o n m o f h e g o p q c r k s e f o t a u Page 3

Esempio (completo) public class MiaFrame extends Frame{ MiaFrame f = new MiaFrame( Ciao! ); f.setsize(500,500); f.setbackground(color.red); f.setvisible(true); public MiaFrame (String linea){ super(linea); public boolean handleevent(event e){ if (e.id == Event.WINDOW_DESTROY) System.exit(0); return super.handleevent(e); Riscrittura del metodo handleevent della classe Component v w x y z { ~ { y { y ~ y ~ ƒ ƒ ~ { y ˆ { Š w Inserire un testo in un frame Ogni volta che si vuole inserire un testo o un disegno in una finestra bisogna riscrivere il metodo paint della classe Component, che ha un parametro di tipo Graphics: Un oggetto di tipo Graphics e una scatola per dipingere, che contiene gli strumenti per colorare, scrivere, cambiare stili, penne, colori ecc. Ad es. su di un oggetto di tipo Graphics può essere invocato il metodo: drawstring(string s, int x, int y) Œ Ž š š œ ž Ÿ Page 4

Esempio public class MiaFrame extends Frame{ MiaFrame f = new MiaFrame( Ciao! ); f.setsize(300,200); f.setbackground(color.red); f.setvisible(true); public MiaFrame (String linea){ super(linea); public boolean handleevent(event e){ if (e.id == Event.WINDOW_DESTROY)System.exit(0); return super.handleevent(e); public void paint(graphics g){ g.drawstring( Carissimo Pinocchio,75,100); il programma genera una finestra rossa, con titolo Ciao, contenente la scritta Carissimo Pinocchio ª «ª ª ± ± ª ± ² ³ µ ± Metodi update e paint Non esiste un modo in Java per ottenere un disegno persistente: bisogna sempre scrivere il codice in un metodo paint e ridisegnare la finestra Ogni volta che una finestra deve essere aggiornata, il gestore degli eventi chiama la funzione update. L implementazione di default di update (della classe Component) consiste nel cancellare il background e chiamare il metodo paint. Sia paint che update hanno un unico parametro di tipo Graphics. ¹ º» ¼ ½ ¾ À Á ½ » ¾ ½ û ¾ À» À Ä Å Æ Ç Æ Å Ç ¾ À ½ Ç È É» Ê Ã Ë ½ ¾ Ç Ì ¹ Í Î Page 5

Panel E un oggetto di java.awt.panel Identifica un area rettangolare nella quale possono essere collocati altri elementi Un panel deve essere contenuto in un altro container o dentro una finestra del web browser: nelle applicazioni stand-alone, il panel, dopo essere stato creato, deve essere aggiunto, per essere visibile, a un oggetto di tipo Window o Frame, mediante il metodo add() della superclasse Container. Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ô Ù Ò Õ Ô Ú Ò Õ Ò Ö Û Ü Ý Þ Ý Ü Þ Õ Ô Ö Þ ß à Ò á Ú â Ô Õ Þ ã Ð ä ä Esempio public class FrameConPanel extends Frame{ public FrameConPanel(String linea){ super(linea); FrameConPanel fp=new FrameConPanel( Ciao ); Panel p=new Panel(); fp.setlayout(new FlowLayout(FlowLayout.LEFT,0,0)); fp.setsize(250,250); fp.setbackground(color.red); p.setbackground(color.blue); fp.add(p); fp.show(); public boolean handleevent(event e){ if (e.id == Event.WINDOW_DESTROY)System.exit(0); return super.handleevent(e); il programma genera una finestra rossa (con titolo Ciao ) con un quadrato blu in alto a sinistra Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ô Ù Ò Õ Ô Ú Ò Õ Ò Ö Û Ü Ý Þ Ý Ü Þ Õ Ô Ö Þ ß à Ò á Ú â Ô Õ Þ ã Ð ä å Page 6

ý ý ý Metodi della classe Graphics public class Grafici extends Frame{ public void paint(graphics g){ g.drawline(10,15,50,100); // linea (10,15)-(50,100) g.drawrect(10,50,100,100); // rettangolo vuoto g.fillrect(150,50,100,100); // rettangolo pieno g.drawroundrect(280,50,50,50,10,20);// rettangolo smussato g.drawoval(350,50,70,130); // ovale Grafici f = new Grafici("Ciao!"); f.setsize(500,300); f.setbackground(color.yellow); f.show(); public Grafici (String linea){ super(linea); public boolean handleevent(event e){ if (e.id == Event.WINDOW_DESTROY) System.exit(0); return super.handleevent(e); æ ç è é ê ë ì í î ï ë ð é ì ë ñ é ì î é í î ò ó ô õ ô ó õ ì î ë í õ ö é ø ñ ù ë ì õ ú ç û ú Layout Managers Sono responsabili della politica di layout e del dimensionamento di ogni componente grafica e delle sue sottocomponenti, ad es. ý Flow layout - per Panels e Frames - dispone gli elementi in fila, da sinistra a destra, assegnando ad ognuno la loro dimensione preferita (centrati, per default) Border layout - per Windows, Dialogs e Frames - contiene 5 aree distinte: North, South, East,West e Center Grid layout - permette di gestire tabelle (linee e colonne fissate) Card layout - permette di trattare l interfaccia come una serie di carte, visibili una alla volta æ ç è é ê ë ì í î ï ë ð é ì ë ñ é ì î é í î ò ó ô õ ô ó õ ì î ë í õ ö é ø ñ ù ë ì õ ú ç û ü Page 7

Flow Layout public class ProvaFlowLayout{ private Frame f; private Button b1; private Button b2; ProvaFlowLayout finestra=new ProvaFlowLayout(); finestra.inizia(); public void inizia(){ f = new Frame("Esempio di Flow Layout"); f.setlayout(new FlowLayout()); // f.setlayout(new FlowLayout(FlowLayout.RIGHT,20,40)); // f.setlayout(new FlowLayout(FlowLayout.LEFT,20,40)); b1 = new Button("Premi qui"); b2 = new Button("Non premere qui"); f.add(b1); f.add(b2); f.pack(); f.show(); // aggiungere metodo handleevent!! Produce una finestra ridimensionabile con due bottoni, allineati al centro (risp. a ds. e a sin.) þ ÿ ÿ Border Layout public class ProvaBorderLayout{ private Frame f; ProvaBorderLayout finestra= new ProvaBorderLayout(); finestra.inizia(); Tasto Nord public void inizia(){ f = new Frame("BorderLayout"); f.add("north", new Button("uno")); f.add("west", new Button("due")); Tasto Ovest f.add("south", new Button("tre")); f.add(borderlayout.center, new Button("quattro")); f.add(borderlayout.east, new Button("cinque")); f.setsize(250,250); f.show(); Tasto Centrato Tasto Sud Produce una finestra ridimensionabile con 5 bottoni: uno centrale e gli altri sui lati (in alto, in basso, a sin. e a ds.) Tasto Est þ ÿ ÿ Page 8

. - / 0 Grid layout public class ProvaGrid{ private Frame f; private Button b1,b2,b3,b4,b5,b6; ProvaGrid griglia = new ProvaGrid(); griglia.inizia(); public void inizia(){ 1 2 f = new Frame("Esempio di griglia"); f.setlayout(new GridLayout(3,2)); b1 = new Button("tasto 1"); b2 = new Button("tasto 2"); b3 = new Button("tasto 3"); b4 = new Button("tasto 4"); b5 = new Button("tasto 5"); b6 = new Button("tasto 6"); f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5); f.add(b6); f.pack(); f.show(); Produce una finestra con una tabellina di 2 righe e 3 colonne di pulsanti attivabili, ingrandibile.! " # $ % $ # % % & ' (! ) % * +, Eventi Evento oggetto che descrive cos è successo Sorgente dell evento ciò che ha generato l evento ad es. un click del mouse genera un oggetto istanza della classe ActionEvent Gestore dell evento metodo che riceve un oggetto di tipo evento, lo riconosce e ne gestisce gli effetti! " # $ % $ # % % & ' (! ) % * + 3 Page 9

La gestione degli eventi JDK 1.0: modello gerarchico: un evento che non è gestito dalla componente che lo ha generato si propaga al contenitore di tale componente. (vedere esempi precedenti!) JDK 1.1: modello a delega: l evento è mandato alla componente che lo ha generato, ma è cura di ogni componente definire dei listener che contengono gestori degli eventi e possono riceverli ed elaborarli Ogni evento ha un listener corrispondente. Gli eventi che non hanno listeners registrati non si propagano 4 5 6 7 8 9 : ; < = 9 > 7 : 9? 7 : < 7 ; < @ A B C B A C : < 9 ; C D E 7 F? G 9 : C H 5 I J Esempio Quando l oggetto di tipo Button viene clickato dal mouse, viene generata un istanza della classe ActionEvent Questo oggetto viene recepito attraverso il metodo actionperformed() da ogni oggetto di tipo ActionListener che sia stato registrato, attraverso il metodo addactionlistener(), per gestire l evento associato a tale pulsante Il metodo getactioncommand() della classe ActionEvent restituisce il nome del comando associato all evento, per esempio il nome dell etichetta del pulsante selezionato 4 5 6 7 8 9 : ; < = 9 > 7 : 9? 7 : < 7 ; < @ A B C B A C : < 9 ; C D E 7 F? G 9 : C H 5 K L Page 10

Risponde con un messaggio public class ProvaPulsante{ Frame f = new Frame("Prova"); Button b = new Button("Clickami!"); b.addactionlistener(new GestisciPulsanti()); f.add(b,"center"); f.pack(); f.show(); public class GestisciPulsanti implements ActionListener{ public void actionperformed(actionevent e){ System.out.println("E' successo qualcosa!"); System.out.println("L'etichetta del pulsante e': " + e.getactioncommand()); M N O P Q R S T U V R W P S R X P S U P T U Y Z [ \ [ Z \ S U R T \ ] ^ P _ X ` R S \ a N b c Risponde con una nuova finestra public class ProvaPulsante{ Frame f = new Frame("Prova"); Button b = new Button("Clickami!"); b.addactionlistener(new GestisciPulsanti()); f.add(b,"center"); f.pack(); f.show(); public class GestisciPulsanti implements ActionListener{ public void actionperformed(actionevent e){ Frame f = new Frame("ProvaGestione"); f.setbackground(color.blue); f.setsize(200,200); f.show(); M N O P Q R S T U V R W P S R X P S U P T U Y Z [ \ [ Z \ S U R T \ ] ^ P _ X ` R S \ a N b b Page 11

Esempio (con listener) public class MiaFrame extends Frame{ MiaFrame f = new MiaFrame("Ciao!"); f.setsize(500,500); f.setbackground(color.red); f.addwindowlistener( new CloseWindowAndExit() ); f.setvisible(true); public MiaFrame (String linea){ super(linea); class CloseWindowAndExit extends WindowAdapter { public void windowclosing (WindowEvent e) { System.exit(0); d e f g h i j k l m i n g j i o g j l g k l p q r s r q s j l i k s t u g v o w i j s x e y x Tracciare i movimenti del mouse Il prossimo esempio mostra un codice Java per tenere traccia dei movimenti del mouse, sia nel caso in cui il pulsante sia premuto (mouse dragging) che nel caso in cui il mouse viene semplicemente spostato (mouse moving) Gli spostamenti del mouse possono essere catturati da una classe che implementi l interfaccia MouseMotionListener. Ma per catturare anche gli altri eventi associati al mouse (es. clicking), la stessa classe deve implementare anche l interfaccia MouseListener d e f g h i j k l m i n g j i o g j l g k l p q r s r q s j l i k s t u g v o w i j s x e y z Page 12

Tracciare i movimenti del mouse public class DueAscoltatori implements MouseMotionListener,MouseListener{ private Frame f; private TextField tf; public static void main(string args []){ DueAscoltatori due = new DueAscoltatori(); due.inizia(); public void inizia(){ f = new Frame("Esempio"); f.add(new Label("clicka e sposta il mouse"), BorderLayout.NORTH); tf = new TextField(30); f.add(tf,borderlayout.south); f.addmousemotionlistener(this); f.addmouselistener(this); f.setsize(200,200); f.show(); { ~ ƒ ~ ~ ƒ ~ ƒ ˆ Š ˆ Š ƒ Š Œ ~ Ž Š // metodi di MouseMotionListener (devono essere implementati tutti!) public void mousedragged(mouseevent e){ String s= "Sposta il mouse: (" + e.getx() + "," + e.gety() +")"; tf.settext(s); public void mousemoved(mouseevent e){ // metodi di MouseListener (devono essere implementati tutti!) public void mouseclicked(mouseevent e){ public void mouseentered(mouseevent e){ String s="il mouse è nella finestra"; tf.settext(s); public void mouseexited (MouseEvent e){ String s="il mouse è uscito dalla finestra"; tf.settext(s); public void mousepressed (MouseEvent e){ public void mousereleased(mouseevent e){ { ~ ƒ ~ ~ ƒ ~ ƒ ˆ Š ˆ Š ƒ Š Œ ~ Ž Š Page 13

Listeners multipli Il fatto che un evento possa essere recepito da più listeners permette di descrivere facilmente situazioni in cui allo stesso evento devono corrispondere azioni multiple Inoltre consente di descrivere situazioni in cui parti non correlate del programma devono reagire agli stessi eventi (ad es. un sistema di help che illustra l utilizzo di pulsanti/menu.) Il meccanismo dei listeners permette di chiamare un metodo addxxxlistener quante volte è necessario: tutti i listeners registrati gestiranno l evento quando esso viene generato (l ordine è arbitrario) š œ ž š Ÿ š ž Checkboxes (stato on/off) public class ProvaCheck extends Frame{ Frame f=new Frame("Checkbox"); f.setlayout(new FlowLayout()); Checkbox uno = new Checkbox("Uno",true); Checkbox due = new Checkbox("Due",true); Checkbox tre = new Checkbox("Tre",false); uno.additemlistener(new GestoreCheck()); due.additemlistener(new GestoreCheck()); tre.additemlistener(new GestoreCheck()); f.add(uno); f.add(due); f.add(tre); f.pack(); f.show(); class GestoreCheck implements ItemListener{ public void itemstatechanged(itemevent ev){ String stato = "non selezionato"; if (ev.getstatechange() == ItemEvent.SELECTED){ stato = "selezionato"; System.out.println(ev.getItem() + " " + stato); š œ ž š Ÿ š ž ª Page 14

Choice (selezione da una lista) public class ProvaChoice extends Frame{ Frame f=new Frame("Choice"); f.setlayout(new FlowLayout()); Choice scelta = new Choice(); scelta.add("primo"); scelta.add("secondo"); scelta.add("terzo"); scelta.additemlistener(new GestoreChoice()); f.add(scelta); f.pack(); f.show(); Primo Primo Secondo Terzo class GestoreChoice implements ItemListener{ public void itemstatechanged(itemevent ev){ System.out.println(ev.getItem()); «± ² ³ µ ± ± ³ ² ³ ¹ º ¹ º ± ³ ² º» ¼ ½ ¾ ± º À Á TextField (linea di testo in input) public class ProvaText extends Frame{ Frame f=new Frame("TextField"); f.setlayout(new FlowLayout()); TextField linea = new TextField("Dimmi qualcosa",30); linea.addactionlistener(new GText()); linea.addtextlistener(new G2Text()); f.add(linea); f.pack(); f.show(); public class GText implements ActionListener{ static int dec = 0; public void actionperformed(actionevent e){ Frame f = new Frame("Nuova Entry!"); f.setbackground(color.blue); f.setsize(200 - dec,200 - dec); dec +=10; f.show(); class G2Text implements TextListener{ public void textvaluechanged(textevent ev){ System.out.println(ev); «± ² ³ µ ± ± ³ ² ³ ¹ º ¹ º ± ³ ² º» ¼ ½ ¾ ± º  Page 15