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

Documenti analoghi
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

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

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

Corso sul linguaggio Java

Gestione degli eventi in Java

NON ABBIAMO ANCORA CORRETTO LE PROVETTE!!!

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

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

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

Programmazione in rete e laboratorio

Riassunto. GUI in Java con l AWT 2

Java SE 6. Programmazione grafica (3)

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

Programmazione in rete e laboratorio

Paradigmi di programmazione (sperimentazioni)

L interfaccia grafica con Java

Corso sul linguaggio Java

Autovalutazione. OO in Java: classi astratte, interfacce, classi interne. Riassunto: cos è la OOP?

Corso sul linguaggio Java

Riassunto. GUI in Java con l AWT 2

Lezione n.12 LPR Informatica Applicata GUI programming

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

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

Applicazioni grafiche e finestre

24 - Possibili approfondimenti

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

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

Corso sul linguaggio Java

4 settembre 2000 Master in Web Technology e Security - Matteo Baldoni 2. incrementa il

Interfacce grafiche (GUI)

Linguaggi di Programmazione I Lezione 16

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

Programmazione Orientata agli Oggetti in Linguaggio Java

GRAFICA ED EVENTI SWING, AWT e JavaFX

L interfaccia grafica in Java

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

Scaletta. Cenni di computabilità. Cosa fa un programma? Definizioni (1/2) Definizioni (2/2) Problemi e domande. Stefano Mizzaro 1

! Problemi, domande, risposte. ! Algoritmi che calcolano funzioni. ! Funzioni computabili e non. ! Problema = insieme di domande omogenee. !

Unità B2 Gestione eventi 2

INTERFACCE GRAFICHE IN JAVA CON SWING DISPENSE

Interazioni col mondo: eventi

Programmazione Java: Interfacce grafiche (GUI)

Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1

Grafica ed eventi. Più movimento alle classi

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo

Unità B.1 Gestione eventi 1

GUI e MVC. Gli oggetti prima di tutto: GUI, Event-driven programming e l architettura MVC. Graphical User Interface

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Java Interfaccia Grafica

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

L oggetto creato. Creazione di Oggetti. Rectangle: il concetto 10. Costruzione. Lo spazio di memoria del linguaggio Java. Rectangle: l oggetto

IL MOTORE PER LA PINZA DI I-D01

Eventi e listener per i componenti grafici

18 - Classi parzialmente definite: Classi Astratte e Interfacce

17 - Classi parzialmente definite: Classi Astratte e Interfacce

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

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

GUI e MVC. Linguaggi di Programmazione: Paradigmi di Programmazione (Sperimentazioni)

ESERCITAZIONI SU Java

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

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

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

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

Application VS Applet

I CONDENSATORI E I RESISTORI DEL KIT

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

Riassunto. La programmazione OO. Oggi. Esempio

! Riassunto. ! for. ! Cicli annidati. ! Esempi, esercizi, errori tipici. ! Programmazione strutturata. ! break e continue I1; I2; I3;

Sviluppo di Interfacce Grafiche in Java

Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)

PROVA FINALE Ingegneria del software

Usare e costruire oggetti. Concetti Fondamentali. Interfaccia Pubblica di una. Application Program Interface

Java Interfaccia Grafica

Appendice B:Interfacce Grafiche

ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016

Corso sul linguaggio Java

! Intro metodi/sottoprogrammi. ! Definizione (intestazione e corpo) e uso. ! Parametri formali e attuali, associazione

Oggi. La programmazione strutturata - III. Sequenza e selezione. Dove siamo. Iterazione: while e do/while. Raffinamenti successivi.

Grafica in Java. introduzione

Oggi. La programmazione strutturata - II. Riassunto (1/2) Riassunto (2/2) Sequenza e selezione. if e while. Stefano Mizzaro 1

Marco Faella Classi interne, locali ed anonime

Esempio 2: Subtyping

APPLICAZIONI & APPLET

maggio 2004 Stefano Sanna - gerda@crs4.it

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo

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

Scope e visibilità per classi

Programmazione a oggetti

8. GUI : Graphics User Interface

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Programmazione in Java (I modulo) Lezione 20: Ereditarietà

Riassunto. Rassegna API - 1. Scaletta. Package. package. import. Stefano Mizzaro 1. Programmazione strutturata TDA OO. OO in Java

GESTIONE DEGLI ERRORI

interfacce ed eventi intercettare il mouse ed altri eventi

Configurazione di una vs. Laboratorio di sistemi interattivi. Dal modello formale all implementazione

Transcript:

Riassunto GUI in Java con l AWT 1 Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 20 20 novembre 2013 Programmazione strutturata OO: TDA, scambio messaggi, eredità, polimorfismo, OO in Java Rassegna API Object, String, Math, System Eccezioni File Documentazione Javadoc delle API Sorgenti delle API 2 Oggi Continuiamo i "carotaggi" Obiettivi: Darvi conoscenze specifiche (come si lavora su un file) Darvi un metodo (come si cercano le informazioni sulla documentazione delle API) Darvi agganci per favorirvi lo studio (più ne sapete più è facile muoversi) Oggi: GUI in Java, l AWT Esempi, concetti e princîpi alla base Componenti Eventi Gestori eventi (ascoltatori) Classi interne Layout e layout manager (cenni) Da fare e da non fare Le API dell AWT 3 4 Cos è una GUI Graphical User Interface Interfaccia Utente Grafica Interazione utente-programma basata su Linea di comando (shell Unix) Solo testo, tastiera, cursore GUI (Mozilla, MSWord, XEmacs, ) Grafica, finestre, pulsanti, puntatore/mouse, menu Finora solo linea di comando Si fanno le GUI in Java? Come? GUI in Java Tutto è un oggetto (istanza) Finestre, pulsanti, (componenti) Azioni dell utente! (eventi) Gestori degli eventi Gestori del posizionamento AWT (Abstract Window Toolkit): classi predefinite (java.awt.*, java.awt.event.*, ) AWT: GUI indipendenti dalla piattaforma (lo stesso codice funziona su varie piattaforme HW/SW) 5 6 Stefano Mizzaro 1

Un esempio La nostra prima GUI: una finestra vuota che non fa nulla public class GUI1 extends Frame { public GUI1 () { super(); // (inutile... super("gui1");) setbounds(100,100,300,200); //Dimensioni settitle("gui1"); //Titolo finestra setvisible(true); //Rende visibile Classe di prova: public class ProvaGUI1 { public static void main (String[] args) { GUI1 finestraprincipale = new GUI1(); System.out.println("Fine"); >java ProvaGUI1 7 Come funziona? In GUI1 c è solo il costruttore che viene chiamato nel main e, usando opportunamente i metodi delle sopraclassi, crea ( costruisce ) la finestra Notate che Fine viene visualizzato subito Potrei invocare i metodi anche dal main Ex. Cosa c è in Frame e nelle superclassi? 8 Le classi usate 9 Gestione eventi Così com è GUI1 non fa nulla! Ci sono solo componenti, non gestori di eventi Modifichiamo la nostra GUI per gestire un evento (chiusura finestra) Click su X evento che codice eseguire? Invocazioni implicite: il programmatore scrive il metodo, non la chiamata mette il metodo in un oggetto (ascoltatore) associa l oggetto all azione 10 Ascoltatore (1/3) Ascoltatore (2/3) public class GUI2 extends Frame { public GUI2 () { Ascoltatore asc = new Ascoltatore(); setbounds(100,100,300,200); settitle("gui2"); setvisible(true); addwindowlistener(asc); //Aggiunge //l'ascoltatore this.addwindowlistener(asc); public class Ascoltatore extends WindowAdapter { public void windowclosing (WindowEvent e) { e.getwindow().dispose(); public void windowclosed (WindowEvent e) { System.exit(0); (Ex.: Provare a rimuovere i due metodi uno alla volta ) 11 12 Stefano Mizzaro 2

Ascoltatore (3/3) (quasi nessuna modifica) public class ProvaGUI2 { public static void main (String[] args) { GUI2 finestraprincipale = new GUI2(); System.out.println("Fine"); Frame >java ProvaGUI2 Meccanismo di gestione eventi Azione utente Creazione dell istanza dell evento opportuno (sottoclasse di AWTEvent) Invocazione (automatica) dei metodi dell ascoltatore (un istanza di EventListener) L ascoltatore deve essersi registrato in precedenza per quegli eventi (addwindowlistener()) L istanza-evento viene passata come argomento al metodo invocato automaticamente È la JVM a invocare un metodo di un istanza che noi scriviamo 13 14 Ascoltatori e adattatori Gerarchia degli eventi 15 16 Tutto è un oggetto! 3 istanze: La GUI (Frame) L evento generato dal click del mouse sul pulsante di chiusura finestra (WindowEvent) L ascoltatore con il codice eseguito per gestire l evento (WindowListener) Facciamo un diagramma unico (4a istanza: il gestore della posizione degli oggetti che potrebbero esserci nella finestra) Senza l adattatore public class Ascoltatore implements WindowListener { public void windowopened(windowevent e) { public void windowiconified(windowevent e) { public void windowdeiconified(windowevent e) { public void windowactivated(windowevent e) { public void windowdeactivated(windowevent e) { public void windowclosed (WindowEvent e) { System.exit(0); public void windowclosing (WindowEvent e) { e.getwindow().dispose(); 17 18 Stefano Mizzaro 3

Ascoltatori e classi interne Ascoltatore e classe membro Meglio estendere un Adapter che implementare un Listener Però c è eredità singola e poi è scomodo creare tante classi e poi come accedo agli attributi privati Soluzione: classi interne per gli ascoltatori Membro ( dentro la classe ) (usate questa!) Locali ( dentro un metodo ) Anonime ( dentro un metodo e senza nome ) public class GUI2 extends Frame { class Ascoltatore extends WindowAdapter { public GUI2 () { 19 20 Ascoltatore e classe locale public class GUI2 extends Frame { public GUI2 () { class Ascoltatore extends WindowAdapter { Ascoltatore e classe anonima public class GUI2 extends Frame { public GUI2 () { WindowAdapter asc = (new WindowAdapter() { ); o anche addwindowlistener(new WindowAdapter() { ); 21 22 Aggiungiamo qualcosa Ok, ora l interfaccia fa qualcosa, ma è vuota Aggiungiamo: un etichetta (c'è la classe Label) un pulsante (c'è la classe Button) add(), definito in Container Etichetta e pulsante (1/5) class GUI3 extends Frame { public GUI3 () { Ascoltatore asc = new Ascoltatore(); setbounds(100,100,300,200); settitle("gui3"); this.add(new Label("Premi il pulsante!"), BorderLayout.NORTH); Button b = new Button("Premimi!"); Panel p = new Panel(); p.add(b); this.add(p, BorderLayout.SOUTH); this.addwindowlistener(asc); setvisible(true); 23 24 Stefano Mizzaro 4

Etichetta e pulsante (2/5) public class ProvaGUI3 { public static void main (String[] args) { GUI3 finestraprincipale = new GUI3(); Eh, il pulsante non fa nulla >java ProvaGUI3 perché manca l ascoltatore! Aggiungiamolo Click su pulsante ActionEvent Gestito da ActionListener Etichetta e pulsante (3/5) class AscoltatorePulsante implements ActionListener { public void actionperformed(actionevent e) { System.out.println( "Hai premuto il pulsante!"); Note: ActionListener non WindowListener (né Action/ WindowAdapter!) actionperformed non windowclosing ActionEvent non WindowEvent 25 26 Etichetta e pulsante (4/5) class GUI4 extends Frame { public GUI4 () { Ascoltatore asc = new Ascoltatore(); AscoltatorePulsante ap = new AscoltatorePulsante(); setbounds(100,100,300,200); settitle("gui4"); this.add(new Label("Premi il pulsante!"), BorderLayout.NORTH); Button b = new Button("Premimi!"); Panel p = new Panel(); p.add(b); this.add(p, BorderLayout.SOUTH); this.addwindowlistener(asc); b.addactionlistener(ap); setvisible(true); Etichetta e pulsante (5/5) public class ProvaGUI4 { public static void main (String[] args) { GUI4 finestraprincipale = new GUI4(); >java ProvaGUI4 27 28 Commenti Pulsante in un Panel Perché? Ex.: provare cosa succede senza il Panel Ex.: Fare il diagramma con tutte le istanze Ex.: togliere il setbounds() (e aggiungere this.pack()) Scaletta: AWT Esempi, concetti e princîpi alla base Componenti Eventi Gestori eventi (ascoltatori) Classi interne Layout e layout manager (cenni) Da fare e da non fare Le API dell AWT 29 30 Stefano Mizzaro 5

Layout (cenni) Come disporre gli oggetti dentro un Container ( contenitore ) LayoutManager: gestore di layout Ogni sottoclasse di Container ha associata un istanza di LayoutManager Gestore di layout di default (BorderLayout per Frame) Ne riparleremo Da fare e da non fare Finestra con due bottoni Classe MyFrame che: estende Frame implementa uno o più listener Si può fare in due modi Male Bene Vediamo il codice male (tutto in un file) 31 32 MalFatto.java (1/3) public class MalFatto extends Frame implements ActionListener, WindowListener{ Button b1 = new Button("Pulsante 1"), b2 = new Button("Pulsante 2"); public MalFatto() {... add(b1); add(b2); b1.addactionlistener(this); b2.addactionlistener(this); addwindowlistener(this); MalFatto.java (2/3) public void actionperformed(actionevent e) { Object source = e.getsource(); if (source == b1) System.out.println("Premuto Pulsante 1"); else if (source == b2) System.out.println("Premuto Pulsante 2"); else System.out.println("Qualcos'altro..."); 33 34 MalFatto.java (3/3) public void windowclosing(windowevent e) { System.out.println("Window Closing"); System.exit(0); public void windowclosed(windowevent e) { public void windowdeiconified(windowevent e){ public void windowiconified(windowevent e) { public void windowactivated(windowevent e) { public void windowdeactivated(windowevent e){ public void windowopened(windowevent e) { public static void main(string[] args) { Frame finestra = new MalFatto(); Perché è fatto male Classe che fa 2 cose Costruisce la GUI Gestisce gli eventi Tanti metodi vuoti inutili Tanto codice inutile, scritto per niente Catene di if/else N.B. Purtroppo molti libri usa(va)no questa tecnica Vediamo il bene 35 36 Stefano Mizzaro 6

14, 19 dicembre 2012 BenFatto.java (1/2) public class BenFatto extends Frame { public BenFatto() { Button b1 = new Button("Pulsante 1"), b2 = new Button("Pulsante 2"); add(b1); add(b2);... b1.addactionlistener(new AscoltatorePulsante1()); b2.addactionlistener(new AscoltatorePulsante2()); addwindowlistener( new WindowAdapter() { public void windowclosing(windowevent e){ System.out.println("Window Closing"); System.exit(0); ); 37 BenFatto.java (2/2) public class AscoltatorePulsante1 implements ActionListener { public void actionperformed(actionevent e){ System.out.println("Premuto Pulsante 1"); public class AscoltatorePulsante2 implements ActionListener { public void actionperformed(actionevent e) { System.out.println("Premuto Pulsante 2"); public static void main(string[] args) { Frame finestra = new BenFatto(); Perché è fatto bene Oggi: GUI in Java, l AWT Evito codice inutile Uso variabili locali anziché d istanza (b1, b2) Ogni classe fa un unica cosa Esempi, concetti e princîpi alla base Porsi sempre la domanda Che cosa fa questa classe? per ogni classe che scrivete Se la risposta alla domanda contiene "e", ripensarci Classe = TDA 1 classe, 1 responsabilità Componenti Eventi Evito catene di if/else, uso l eredità Ascoltatori con classi interne Una classe, una responsabilità 39 Gestori eventi (ascoltatori) Classi interne Layout e layout manager (cenni) Da fare e da non fare Le API dell AWT Analisi API: 2 package 40 java.awt (1/2) java.awt (93 classi + 16 interfacce) 38 Contiene le classi per i componenti (finestre, pulsanti, menu, ) e i layout (e altro: Font, Color, ) java.awt.event (25 + 18) Contiene le classi per gli eventi Rappresentazione eventi Gestione eventi Stefano Mizzaro 41 42 7

14, 19 dicembre 2012 java.awt (2/2) java.awt.event (1/2) 43 java.awt.event (2/2) Riassunto: GUI in Java, l AWT Esempi Concetti e princîpi alla base Componenti Eventi 45 Gestori eventi (ascoltatori) Classi interne Layout e layout manager (cenni) Da fare e da non fare Le API dell AWT 44 (prox. lezione: analisi più sistematica) 46 Riferimenti Libri & lucidi Javadoc API Fotocopie Tutorial vari in rete Stefano Mizzaro 47 8