SlideShare a Scribd company logo
1 of 56
Download to read offline
java.awt.*
CRS4 - http://www.crs4.it




                            Abstract Window Toolkit


                                       aprile 2005




                                 Stefano Sanna - gerda@crs4.it
Agenda
                                Java e interfacce grafiche
                            ●



                                Caratteristiche di AWT
                            ●
CRS4 - http://www.crs4.it




                                Design e implementazione di interfacce
                            ●


                                grafiche
                                Panoramica dei componenti disponibili
                            ●



                                Primitive grafiche e modello ad eventi
                            ●



                                Esempi di codice
                            ●



                                Bibliografia
                            ●



                                Conclusioni
                            ●



                                               Stefano Sanna - gerda@crs4.it
Java
CRS4 - http://www.crs4.it




                            Stefano Sanna - gerda@crs4.it
Due approcci per le UI in Java
                                Componenti heavyweight
                            ●


                                    Sono basati su componenti forniti dal sistema
                                –
CRS4 - http://www.crs4.it




                                    operativo (scritti in C/C++): le prestazioni e
                                    l'integrazione “estetica” con le altre
                                    applicazioni è massima
                                    L'applicazione perde portabilità ove non è
                                –
                                    disponibile la libreria
                                Componenti lightweight
                            ●


                                    Sono basati sull'assegnazione di una area di
                                –
                                    disegno sul desktop, dove la VM può tracciare i
                                    componenti in piena libertà: le prestazioni non
                                    sono eccezionali ma la portabilità è assicurata!
                                                Stefano Sanna - gerda@crs4.it
AWT e Swing
                                AWT: Abstract Window Toolkit
                            ●


                                    Nasce con le prime versioni di Java (1.0.2 e
                                –
CRS4 - http://www.crs4.it




                                    1.1)
                                    Definisce un insieme minimo di componenti
                                –
                                    nativi comuni a tutte le UI (Win32, X-Window,
                                    MacOS, SymbianOS…)

                                Swing (JFC, Java Foundation Classes)
                            ●


                                    Disponibili dalla versione 1.2
                                –

                                    Definisce un set di componenti complessi e
                                –
                                    personalizzabili indipendenti dalla piattaforma

                                                Stefano Sanna - gerda@crs4.it
Altre librerie: SWT e LWVCL
                                SWT: Standard Widget Toolkit
                            ●


                                    Utilizza componenti nativi come AWT, ma è
                                –
CRS4 - http://www.crs4.it




                                    basata su un set molto ricco
                                    E' utilizzata sull'IDE Eclipse
                                –


                                LWVCL: Lightweight Visual Comp Library
                            ●


                                    E' una soluzione full-Java (come Swing) per
                                –
                                    sistemi mobili quali palmari e cellulari
                                    Fornisce un set molto ricco di componenti e
                                –
                                    garantisce ottime prestazioni in termini di
                                    velocità di elaborazione

                                                 Stefano Sanna - gerda@crs4.it
Abstract Window Toolkit
                                E’ un insieme di classi per la creazione di
                            ●


                                interfacce grafiche elementari
CRS4 - http://www.crs4.it




                                Contiene una librerie di componenti heavy-
                            ●


                                weighted: ogni componente ha il suo
                                corrispondente nel sistema operativo host,
                                a cui la VM delega la gestione del
                                componente vero e proprio
                                Permette di creare componenti
                            ●


                                personalizzati attraverso il controllo diretto
                                delle funzioni di disegno e di gestione dei
                                dispositivi di input (mouse, tastiera…)
                                             Stefano Sanna - gerda@crs4.it
Abstract Window Toolkit
                                Coerentemente con la vocazione
                            ●


                                multipiattaforma di Java, i componenti AWT
CRS4 - http://www.crs4.it




                                e le applicazioni sviluppate con questi
                                cambiano il loro aspetto a seconda del
                                sistema operativo in cui sono eseguite
                                Questa caratteristica da una parte limita le
                            ●


                                GUI in Java 1.1 (sono disponibili solo i
                                componenti comuni a tutte le interfacce
                                grafiche), dall’altro permette un vero
                                sviluppo indipendente dalla piattaforma!


                                             Stefano Sanna - gerda@crs4.it
GUI in Java: il codice
                                L’interfaccia grafica è costruita all’interno
                            ●


                                del codice sorgente: non esistono i
CRS4 - http://www.crs4.it




                                resource-file!
                                import java.awt.*;

                                public class HelloGUI extends Frame {
                                  private Label helloLabel = new Label(quot;Hello!quot;);

                                    public HelloGUI() {
                                      this.setTitle(quot;Hello!quot;);
                                      this.add(helloLabel);
                                      this.pack();
                                    }

                                    public static void main(String[] args) {
                                      HelloGUI myHello = new HelloGUI();
                                      myHello.show();
                                    }
                                }




                                                           Stefano Sanna - gerda@crs4.it
Object Oriented
                                Le interfacce grafiche sono costituite da
                            ●


                                “oggetti” e dunque la loro
CRS4 - http://www.crs4.it




                                implementazione in un linguaggio ad
                                oggetti è abbastanza naturale
                                Creare un nuovo oggetto grafico significa
                            ●


                                creare una istanza della classe
                                corrispondente
                                Java è completamente ad oggetti e la
                            ●


                                costruzione di interfacce grafiche si integra
                                perfettamente con la filosofia del
                                linguaggio
                                             Stefano Sanna - gerda@crs4.it
Creazione di interfacce grafiche
                                Creare interfacce grafiche significa
                            ●


                                essenzialmente:
CRS4 - http://www.crs4.it




                                1.Istanziare e assemblare i componenti visuali
                                  con cui interagisce l’utente
                                2.Associare i dati dell’applicazione ai componenti
                                  visuali
                                3.Intercettare gli eventi dei componenti visuali e
                                  compiere opportune azioni sui dati
                                  dell’applicazione




                                              Stefano Sanna - gerda@crs4.it
Creazione di interfacce grafiche
                            1.Istanziare e assemblare i componenti
                              visuali con cui interagisce l’utente:
CRS4 - http://www.crs4.it




                                  Stabilire quali sono i componenti necessari a
                              –
                                  visualizzare i dati dell’applicazione (campi di
                                  testo, valori booleani, liste…)
                                  Organizzare i componenti in pannelli, finestre,
                              –
                                  dialoghi
                                  Verificare la usabilità dell’interfaccia
                              –




                                               Stefano Sanna - gerda@crs4.it
Creazione di interfacce grafiche
                            2.Associare i dati dell’applicazione ai
                              componenti visuali:
CRS4 - http://www.crs4.it




                                  Fare in modo che ad una qualsiasi variazione
                              ●


                                  dei dati (modello) dell’applicazione corrisponda
                                  un aggiornamento di quanto visualizzato
                                  dall’interfaccia grafica
                                  Prevedere opportuni raggruppamenti e/o
                              ●


                                  separazioni per utilizzare al meglio i (pochi)
                                  componenti disponibili




                                               Stefano Sanna - gerda@crs4.it
Creazione di interfacce grafiche
                            3.Intercettare gli eventi dei componenti
                              visuali e compiere opportune azioni sui dati
CRS4 - http://www.crs4.it




                              dell’applicazione:
                                  Registrare la propria applicazione in ascolto
                              ●


                                  degli eventi di interesse (pressione di un
                                  pulsante, uso del mouse, chiusura di una
                                  finestra…)
                                  Modificare i dati secondo le azioni compiute
                              ●


                                  dall’utente sull’interfaccia grafica




                                              Stefano Sanna - gerda@crs4.it
Componenti elementari
                                Frame, Window, Dialog
                            ●



                                Panel e Layout Manager
                            ●
CRS4 - http://www.crs4.it




                                Menubar, Menu, MenuItem
                            ●



                                Button e Label
                            ●



                                TextField e TextArea
                            ●



                                List e Choice (ComboBox)
                            ●



                                CheckBox e CheckBoxMenuItem
                            ●



                                Canvas
                            ●




                                            Stefano Sanna - gerda@crs4.it
java.awt.Frame
                                E’ la classe che permette di creare finestre
                            ●


                                con un bordo, una barra del titolo, una
CRS4 - http://www.crs4.it




                                barra di menù (opzionale), e un’area dove
                                assemblare i componenti dell’interfaccia
                                grafica
                                E’, nella maggior parte dei casi, la finestra
                            ●


                                principale dell’applicazione da cui si creano
                                tutte le altre finestre
                                (vedi: Window e Dialog)



                                             Stefano Sanna - gerda@crs4.it
Window e Dialog
                                Le Window sono finestre senza bordo e
                            ●


                                menù, utilizzate per splash screen e per
CRS4 - http://www.crs4.it




                                aree del quale il programmatore vuole
                                controllo completo
                                Le Dialog sono finestre (eventualmente
                            ●


                                modali) con il quale l'applicazione richiede
                                l'interazione esplicita con l'utente: avvisi,
                                inserimento di dati, conferme...




                                             Stefano Sanna - gerda@crs4.it
java.awt.Panel
                                Le istanze di questa classe sono contenitori
                            ●


                                per altri componenti
CRS4 - http://www.crs4.it




                                E’ possibile assegnare una logica di
                            ●


                                organizzazione dei componenti all’interno
                                di un pannello a seconda delle esigenze di
                                visualizzazione
                                Le interfacce “non banali” sono costituite
                            ●


                                da numerosi pannelli annidati, ciascuno
                                contenente un certo gruppo di componenti
                                elementari o complessi


                                             Stefano Sanna - gerda@crs4.it
Layout Manager
                                I LayoutManager sono degli oggetti
                            ●


                                particolari che gestiscono il
CRS4 - http://www.crs4.it




                                posizionamento e dimensionamento dei
                                componenti all’interno dei contenitori
                                (Frame, Window, Dialog, Panel…).
                                 Seguendo la filosofia di Java (indipendente
                            ●


                                dalla piattaforma!), i LayoutManager
                                permettono di stabilire una posizione logica
                                (“di massima”, potremmo dire) dei
                                componenti, delegando poi alla specifica
                                piattaforma il reale tracciamento dei
                                componenti.
                                             Stefano Sanna - gerda@crs4.it
Layout Manager
                                FlowLayout
                            ●


                                    Dispone i componenti assegnando a ciascuno
                                –
CRS4 - http://www.crs4.it




                                    le dimensioni preferenziali
                                BorderLayout
                            ●


                                    Divide il container in 5 regioni (vedi
                                –
                                    screenshot)
                                CardLayout
                            ●


                                    Crea uno stack di componenti che vengono
                                –
                                    visualizzati alternativamente



                                                 Stefano Sanna - gerda@crs4.it
Layout Manager
                                GridLayout
                            ●


                                    Crea una griglia (n*m, con n e m assegnati) in
                                –
CRS4 - http://www.crs4.it




                                    cui dispone i componenti assegnando a
                                    ciascuno le dimensioni preferenziali
                                GridBagLayout
                            ●


                                    In assoluto il layout più potente e complesso;
                                –
                                    offre una organizzazione a griglia come il
                                    GridLayout, ma consente maggiore controllo
                                    sulla posizione e dimensione dei componenti




                                                Stefano Sanna - gerda@crs4.it
java.awt.FlowLayout
                                È il layout di
                            ●


                                impostato di default
CRS4 - http://www.crs4.it




                                Dispone i
                            ●


                                componenti in
                                sequenza
                                assegnando a
                                ciascuno le
                                dimensioni
                                preferenziali



                                            Stefano Sanna - gerda@crs4.it
java.awt.BorderLayout
                                È uno dei layout più
                            ●


                                utilizzati per
CRS4 - http://www.crs4.it




                                l’organizzazione di
                                componenti su
                                finestre di
                                dimensione
                                variabile.




                                             Stefano Sanna - gerda@crs4.it
java.awt.CardLayout
                                Mostra un
                            ●


                                componente per
CRS4 - http://www.crs4.it




                                volta
                                Utile per creare
                            ●


                                interfacce tipo
                                “pannello di
                                configurazione”




                                                           VISTA

                                             Stefano Sanna - gerda@crs4.it
Layout Manager
                                E’ comunque possibile fare a meno dei
                            ●


                                Manager e specificare esattamente
CRS4 - http://www.crs4.it




                                posizione e dimensione di ciascun
                                componente. Tale scelta è consigliabile
                                solo con componenti custom (e dunque
                                non dipendenti dalla piattaforma)
                                L’uso dei manager di layout è comune ad
                            ●


                                altri linguaggi e ambienti di sviluppo, così
                                pure la tecnica dei pannelli annidati
                                (VisualBasic, Delphi…)


                                             Stefano Sanna - gerda@crs4.it
Menubar, Menu, MenuItem
                                E’ un insieme di classi che permette di
                            ●


                                creare menù per i Frame e popup-menù
CRS4 - http://www.crs4.it




                                per gli altri componenti di AWT.
                                    Menubar: è il contenitore delle voci di menù
                                –
                                    posto immediatamente sotto la barra del titolo
                                    Menu: è la classe che individua le voci visibili
                                –
                                    su una menubar
                                    MenuItem: è la classe che
                                –
                                    permette di creare voci di
                                    menù selezionabili
                                    dall’utente.


                                                 Stefano Sanna - gerda@crs4.it
Button e Label
                                La classe Button permette di creare
                            ●


                                pulsanti da azionare con il mouse o con la
CRS4 - http://www.crs4.it




                                tastiera
                                Le istanze di Label sono oggetti per la
                            ●


                                visualizzazione di testo non editabile
                                dall’utente. Possono essere utilizzati per
                                finestre informative o indicazioni di
                                supporto agli altri componenti (ad esempio,
                                per descrivere il contenuto di una certa
                                lista di elementi)


                                            Stefano Sanna - gerda@crs4.it
TextField e TextArea
                                E’ la classe che permette di creare oggetti
                            ●


                                attraverso i quali l’utente può digitare
CRS4 - http://www.crs4.it




                                stringhe di testo
                                Permette di gestire eventi di provenienti
                            ●


                                dalla tastiera (ad esempio, per offrire
                                suggerimenti all’utente durante la
                                digitazione)
                                Per l’inserimento di testo su più linee è
                            ●


                                disponibile il componente TextArea, che
                                permette di gestire anche le barre di
                                scorrimento
                                             Stefano Sanna - gerda@crs4.it
List e ComboBox
                                Permette di mostrare una lista di elementi
                            ●


                                di testo
CRS4 - http://www.crs4.it




                                Offre la possibilità di aggiungere barre di
                            ●


                                scorrimento, di selezionare gli elementi
                                singolarmente o a gruppi
                                La versione Swing (JList) permette di
                            ●


                                visualizzare una lista di componenti grafici
                                arbitrari (contenenti testo e immagini)
                                La classe Chioce (ComboBox) permette la
                            ●


                                creazione di menù a tendina

                                             Stefano Sanna - gerda@crs4.it
CheckBox e CheckBoxMenuItem
                                La classe CheckBox permette di
                            ●


                                rappresentare valori booleani true/false
CRS4 - http://www.crs4.it




                                attraverso check box (selettori a scelta
                                multipla) o radio button (selettori a scelta
                                mutuamente esclusiva)
                                I CheckBoxMenuItem permettono di gestire
                            ●


                                valori booleani attraverso menù dei Frame.




                                             Stefano Sanna - gerda@crs4.it
java.awt.Canvas
                                E’ il componente con cui è possibile
                            ●


                                disegnare in una regione dello schermo
CRS4 - http://www.crs4.it




                                attraverso primitive grafiche quali punti,
                                linee, poligoni, testo, immagini…
                                Attraverso la riscrittura di un metodo
                            ●


                                (paint) e le funzionalità della classe
                                Graphics ottenuta dal framework è
                                possibile creare effetti grafici personalizzati
                                Numerose librerie permettono di gestire i
                            ●


                                più diffusi formati grafici per la
                                visualizzazione di immagini
                                              Stefano Sanna - gerda@crs4.it
Primitive grafiche
                                Ogni volta che il sistema grafico deve
                            ●


                                ridisegnare l’area del componente viene
CRS4 - http://www.crs4.it




                                invocato il metodo paint(). Attraverso
                                questo metodo il sistema fornisce una
                                istanza di Graphics su cui eseguire le
                                operazioni di disegno.
                                Il Canvas, oltre ad un’area di disegno,
                            ●


                                mette a disposizione tutta l’infrastruttura
                                per la gestione degli eventi associati al
                                componente: mouse, tastiera, interazione
                                con gli altri componenti. Questo permette
                                di realizzare componenti personalizzati.
                                             Stefano Sanna - gerda@crs4.it
Primitive grafiche
                                                                   import java.awt.*;
                            An instance of Graphics
                                                                   public class MyComponent extends Canvas {
CRS4 - http://www.crs4.it




                                                                       public void paint(Graphics g) {
                                                                         g.drawLine(……………..)
                                                                       }
                                                                   }




                                                            L’utente sposta la finestra…

                                                      Stefano Sanna - gerda@crs4.it
Event Driven
                                Nello sviluppo di applicazioni con
                            ●


                                interfaccia utente a linea di comando vi era
CRS4 - http://www.crs4.it




                                un unico flusso all’interno del programma
                                (ricordate scanf o readln?)
                                Le interfacce grafiche permettono
                            ●


                                all’utente di selezionare diversi dispositivi
                                di input indipendenti (tastiera, mouse…)
                                che agiscono su numerosi componenti
                                dell’interfaccia stessa: non esiste più un
                                unico flusso all’interno del programma, non
                                si può rimanere in attesa di uno specifico
                                segnale…
                                             Stefano Sanna - gerda@crs4.it
Event Driven
                                Le nuove interfacce grafiche hanno portato
                            ●


                                alla definizione di un nuovo modello di
CRS4 - http://www.crs4.it




                                interazione con l’utente: gli eventi
                                Non vi sono routine bloccanti che
                            ●


                                controllano i dispositivi di input (come
                                scanf in C…): il sistema operativo nasconde
                                tutta la gestione dei dispositivi di input
                                L’applicazione definisce una interfaccia con
                            ●


                                cui il sistema operativo comunica in modo
                                asincrono i comandi (pulsante premuto,
                                testo digitato, finestra ridimensionata…)
                                             Stefano Sanna - gerda@crs4.it
Event Sequence Diagram
CRS4 - http://www.crs4.it




                                    Stefano Sanna - gerda@crs4.it
Event Driven
                                                             import java.awt.*;

                                                             public class HelloGUI extends Frame {
                                                               private Label helloLabel = new Label(quot;Hello!quot;);
CRS4 - http://www.crs4.it




                                                                 public HelloGUI() {
                                                                   this.setTitle(quot;Hello!quot;);
                                                                   this.add(helloLabel);
                                                                   this.pack();
                                                                 }

                                                                 public void actionPerformed(ActionEvent ae) {
                                                                   ************
                                                                   **********
                                                                 }
                                                             }




                                                       Gli eventi passano da un livello all’altro in maniera
                                                   •
                                                       trasparente per l’utente:
                                                        • Window Message in Win32
                                                        • Native method nella JVM
                                                        • Pure Java dal pulsante in poi
                            Sistema operativo




                                                   Stefano Sanna - gerda@crs4.it
Event Driven
                                                                           connect()

                                                                           showWindow()
                                                     Listener 1
CRS4 - http://www.crs4.it




                                                                           startTime()



                                                     Listener 2


                            Event Source


                                                    Listener n-1


                                                     Listener n

                                           Stefano Sanna - gerda@crs4.it
MouseMotionListener                    WindowListener
CRS4 - http://www.crs4.it




                                                                        Frame
                            Virtual Machine




                                                             MouseListener
                                     ActionListener

                                                                interface   class


                                    Stefano Sanna - gerda@crs4.it
Listener
                                ActionListener
                            ●


                                    intercetta eventi di azioni (pulsanti, menù,
                                –
CRS4 - http://www.crs4.it




                                    pressione del tasto INVIO su un TextField)
                                WindowListener
                            ●


                                    intercetta gli eventi legati alla gestione di
                                –
                                    Frame, Window e Dialog (visualizza/nascondi)
                                MouseListener
                            ●


                                    intercetta gli eventi del mouse (entrata/uscita
                                –
                                    in una certa zona, pressione dei tasti…)
                                MouseMotionListener:
                            ●


                                    intercetta il movimento (semplice o drag)
                                –
                                                Stefano Sanna - gerda@crs4.it
Listener
                                Vi sono altri tipi di listener per gestire gli
                            ●


                                eventi della tastiera, di digitazione testo,
CRS4 - http://www.crs4.it




                                del ciclo di vita dei componenti, del focus
                                tra i componenti…

                                Ciascun tipo di listener è specializzato per
                            ●


                                un ben determinato tipo di eventi. Questi, a
                                loro volta, sono destinati a notificare solo
                                un ben determinato tipo di azione fatta
                                sull’interfaccia grafica


                                              Stefano Sanna - gerda@crs4.it
Domande?
CRS4 - http://www.crs4.it




                             Stefano Sanna - gerda@crs4.it
Mano al codice!!!
                            … e alla documentazione!!!
                                Le classi sono contenute all’interno dei
                            ●
CRS4 - http://www.crs4.it




                                package java.awt, java.awt.event,
                                java.awt.image, java.awt.datatransfer,
                                java.applet.
                                Per scrivere delle buone interfacce grafiche
                            ●


                                sarebbe opportuno avere una buona
                                conoscenza del linguaggio e della
                                programmazione ad oggetti (polimorfismo,
                                classi inner, interfacce, design pattern…).


                                             Stefano Sanna - gerda@crs4.it
Componenti disponibili
                                Button, Canvas, Checkbox,
                            ●


                                CheckboxGroup, CheckboxMenuItem,
CRS4 - http://www.crs4.it




                                Choice, Dialog, FileDialog, Font, Frame,
                                Image, Label, List, Menu, MenuBar,
                                MenuItem, Panel, ScrollPane, TextArea,
                                TextField, Window…




                                             Stefano Sanna - gerda@crs4.it
Una semplice finestra
                            import java.awt.*;

                            public class SimpleFrame1 extends Frame {

                                private Label titleLabel = new Label(quot;Simple Framequot;);
CRS4 - http://www.crs4.it




                                public SimpleFrame1() {

                                    this.setLayout(new FlowLayout());

                                    this.setTitle(titleLabel.getText());

                                    this.add(titleLabel);

                                    this.pack();

                                    this.show();

                                }

                                public static void main(String[] args) {

                                    new SimpleFrame1();

                                }

                            }


                                                          Stefano Sanna - gerda@crs4.it
Aggiungiamo un menù...
                            public class SimpleFrame2 extends Frame {

                             private Label titleLabel = new Label(quot;Simple Framequot;);

                             private MenuBar menuBar = new MenuBar();
CRS4 - http://www.crs4.it




                             private Menu fileMenu = new Menu(quot;Filequot;);

                             private MenuItem exitMenuItem = new MenuItem(quot;Exitquot;);

                             public SimpleFrame2() {

                                 this.setMenuBar(menuBar);

                                 menuBar.add(fileMenu);

                                 fileMenu.add(exitMenuItem);

                                 this.setLayout(new FlowLayout());

                                 this.setTitle(titleLabel.getText());

                                 this.add(titleLabel);

                                 this.pack();

                                 this.show();

                             }
                                                     Stefano Sanna - gerda@crs4.it
MouseMotionListener                    WindowListener
CRS4 - http://www.crs4.it




                                                                        Frame
                            Virtual Machine




                                                             MouseListener
                                     ActionListener

                                                                interface   class


                                    Stefano Sanna - gerda@crs4.it
Gestire gli eventi

                                        PRODUCER                                       CONSUMER
                                                    Registers itself as listener…
CRS4 - http://www.crs4.it


                            LISTENERS




                                                    Invokes listener’s methods
                                                                                    actionPerformed…




                                                   Stefano Sanna - gerda@crs4.it
Gestire gli eventi
                                Ciascun producer dispone di una lista di
                            ●


                                listener (ascoltatori) interessati a gestire gli
CRS4 - http://www.crs4.it




                                eventi prodotti dal producer stesso
                                Per poter ricevere notifica di nuovi eventi i
                            ●


                                listener devono implementare l’interfaccia
                                relativa ad una specifica classe di eventi e
                                registrarsi presso il producer
                                Il producer, al manifestarsi di un evento,
                            ●


                                invocherà i metodi dell’interfaccia dei
                                listener inviando come parametri degli
                                EventObject specifici per il tipo di evento
                                              Stefano Sanna - gerda@crs4.it
Gestire gli eventi
                                I passi nella realizzazione del modello ad
                            ●


                                eventi:
CRS4 - http://www.crs4.it




                                    Creazione di un listener per il tipo di evento di
                                –
                                    interesse (ActionListener, MouseListener,
                                    MouseMotionListener, TextListener,
                                    ComponentListener…) attraverso
                                    l’implementazione di una opportuna interfaccia
                                    Registrazione del listener appena creato nella
                                –
                                    lista ascoltatori del producer




                                                Stefano Sanna - gerda@crs4.it
Gestire gli eventi
                                    ... implements ActionListener ...


                                    public void actionPerformed(ActionEvent ae) {
CRS4 - http://www.crs4.it




                                          if (ae.getSource() == exitMenuItem) {
                                              System.exit(0);
                                          }
                                      }



                                    exitMenuItem.addActionListener(this);




                                La classe dichiara di voler (saper…) gestire
                            ●


                                ActionEvent e implementa il metodo
                                actionPerformed
                                La classe registra se stessa quale
                            ●


                                ascoltatore degli eventi del menù
                                                       Stefano Sanna - gerda@crs4.it
Pannelli annidati
CRS4 - http://www.crs4.it




                                                                           FlowLayout
                            BorderLayout


                                           Stefano Sanna - gerda@crs4.it
Componenti personalizzati
                                Grazie all’architettura object oriented è
                            ●


                                semplice sviluppare componenti
CRS4 - http://www.crs4.it




                                personalizzati estendendo quelli esistenti o
                                creandone di completamente nuovi
                                Possiamo ereditare dalla classe Component
                            ●


                                tutta la gestione del mouse, della tastiera e
                                degli altri eventi correlati senza la
                                necessità di scrivere codice nativo
                                Se scritti in modo sapiente (!) i nuovi
                            ●


                                componenti si integreranno perfettamente
                                con l’infrastruttura AWT
                                             Stefano Sanna - gerda@crs4.it
Bibliografia
                                Java AWT Reference
                            ●


                                John Zukowski
CRS4 - http://www.crs4.it




                                O'Reilly 1997



                                Il libro non è più in stampa, ma l'editore
                                mette a disposizione gratuitamente i file
                                PDF di tutti i capitoli:
                                http://www.oreilly.com/catalog/javawt/book/index.html




                                                 Stefano Sanna - gerda@crs4.it
Conclusioni
                                Java AWT è uno strumento rapido e
                            ●


                                multipiattaforma per la creazione di
CRS4 - http://www.crs4.it




                                interfacce semplici
                                Lo sviluppo di applicazioni complesse
                            ●


                                richiede l'uso di librerie più complete (ad
                                esempio, Swing o LWVCL)
                                AWT è una buona palestra per imparare il
                            ●


                                modello ad eventi!!!




                                             Stefano Sanna - gerda@crs4.it
Grazie... :-)
CRS4 - http://www.crs4.it




                                      Copyright (c) 2004-2005 CRS4

                                 Scritto da Stefano Sanna (gerda@crs4.it)

                            è garantito il permesso di copiare, distribuire e/o
                            modificare questo documento seguendo i termini
                            della Licenza per Documentazione Libera GNU,
                            Versione 1.1 o ogni versione successiva pubblicata
                            dalla Free Software Foundation. Una copia della
                            licenza in lingua italiana è disponibile presso:

                             http://www.softwarelibero.it/gnudoc/fdl.it.html




                                                             Stefano Sanna - gerda@crs4.it

More Related Content

Viewers also liked (20)

JAVA AWT
JAVA AWTJAVA AWT
JAVA AWT
 
Awt and swing in java
Awt and swing in javaAwt and swing in java
Awt and swing in java
 
AWT- JAVA
AWT- JAVAAWT- JAVA
AWT- JAVA
 
Event Handling in java
Event Handling in javaEvent Handling in java
Event Handling in java
 
Swing and AWT in java
Swing and AWT in javaSwing and AWT in java
Swing and AWT in java
 
Gui programming (awt)
Gui programming (awt)Gui programming (awt)
Gui programming (awt)
 
Java applets
Java appletsJava applets
Java applets
 
Event handling
Event handlingEvent handling
Event handling
 
Awt vs java swing
Awt vs java swingAwt vs java swing
Awt vs java swing
 
Java Awt
Java AwtJava Awt
Java Awt
 
Sesion12-Componentes AWT
Sesion12-Componentes AWTSesion12-Componentes AWT
Sesion12-Componentes AWT
 
Java Event Handling
Java Event HandlingJava Event Handling
Java Event Handling
 
tL19 awt
tL19 awttL19 awt
tL19 awt
 
Vbr Awt 01
Vbr Awt 01Vbr Awt 01
Vbr Awt 01
 
Event handling63
Event handling63Event handling63
Event handling63
 
Event handling
Event handlingEvent handling
Event handling
 
Cuadro comparativo AWT-SWING
Cuadro comparativo AWT-SWINGCuadro comparativo AWT-SWING
Cuadro comparativo AWT-SWING
 
Java programming-Event Handling
Java programming-Event HandlingJava programming-Event Handling
Java programming-Event Handling
 
java-Unit4 chap2- awt controls and layout managers of applet
java-Unit4 chap2- awt controls and layout managers of appletjava-Unit4 chap2- awt controls and layout managers of applet
java-Unit4 chap2- awt controls and layout managers of applet
 
java swing tutorial for beginners(java programming tutorials)
java swing tutorial for beginners(java programming tutorials)java swing tutorial for beginners(java programming tutorials)
java swing tutorial for beginners(java programming tutorials)
 

Similar to Java AWT

Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Marco Loregian
 
Progettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerProgettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerAlessandro Mascherin
 
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...LeonardoIurada
 
Comparazione Software produzione corsi elearning
Comparazione Software produzione corsi elearningComparazione Software produzione corsi elearning
Comparazione Software produzione corsi elearningFormaLms
 
Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione Develer S.r.l.
 
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...Mattia De Bernardi
 
Alessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma AndroidAlessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma AndroidAlessandro Forte
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDaniele Mondello
 
Introduzione alla programmazione Java
Introduzione alla programmazione JavaIntroduzione alla programmazione Java
Introduzione alla programmazione JavaMassimiliano Brolli
 
Qualità del Software
Qualità del SoftwareQualità del Software
Qualità del SoftwareYeser Rema
 
La scelta di Plone per la comunicazione istituzionale dell'INAF
La scelta di Plone per la comunicazione istituzionale dell'INAFLa scelta di Plone per la comunicazione istituzionale dell'INAF
La scelta di Plone per la comunicazione istituzionale dell'INAFPlone for Research and University
 
Community Days 2012 - Tecnologie di desktop virtualization
Community Days 2012 - Tecnologie di desktop virtualization Community Days 2012 - Tecnologie di desktop virtualization
Community Days 2012 - Tecnologie di desktop virtualization Fabrizio Volpe
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)Sabino Labarile
 
Elio Tondo - Linux In Azienda
Elio Tondo - Linux In AziendaElio Tondo - Linux In Azienda
Elio Tondo - Linux In AziendaBetter Software
 

Similar to Java AWT (20)

Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3
 
Cac Es3 2009
Cac Es3 2009Cac Es3 2009
Cac Es3 2009
 
Progettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerProgettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computer
 
Introduzione a .Net Core
Introduzione a .Net CoreIntroduzione a .Net Core
Introduzione a .Net Core
 
Maven - Aprile 2010
Maven - Aprile 2010Maven - Aprile 2010
Maven - Aprile 2010
 
Java sul tuo Mac
Java sul tuo MacJava sul tuo Mac
Java sul tuo Mac
 
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
 
Comparazione Software produzione corsi elearning
Comparazione Software produzione corsi elearningComparazione Software produzione corsi elearning
Comparazione Software produzione corsi elearning
 
Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione
 
Develer - Qt Embedded - Intro
Develer - Qt Embedded - IntroDeveler - Qt Embedded - Intro
Develer - Qt Embedded - Intro
 
3rd 3DDRESD: BSS
3rd 3DDRESD: BSS3rd 3DDRESD: BSS
3rd 3DDRESD: BSS
 
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
 
Alessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma AndroidAlessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma Android
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
 
Introduzione alla programmazione Java
Introduzione alla programmazione JavaIntroduzione alla programmazione Java
Introduzione alla programmazione Java
 
Qualità del Software
Qualità del SoftwareQualità del Software
Qualità del Software
 
La scelta di Plone per la comunicazione istituzionale dell'INAF
La scelta di Plone per la comunicazione istituzionale dell'INAFLa scelta di Plone per la comunicazione istituzionale dell'INAF
La scelta di Plone per la comunicazione istituzionale dell'INAF
 
Community Days 2012 - Tecnologie di desktop virtualization
Community Days 2012 - Tecnologie di desktop virtualization Community Days 2012 - Tecnologie di desktop virtualization
Community Days 2012 - Tecnologie di desktop virtualization
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)
 
Elio Tondo - Linux In Azienda
Elio Tondo - Linux In AziendaElio Tondo - Linux In Azienda
Elio Tondo - Linux In Azienda
 

More from Stefano Sanna

Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Stefano Sanna
 
Android Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldAndroid Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldStefano Sanna
 
Android Things Linux Day 2017
Android Things Linux Day 2017 Android Things Linux Day 2017
Android Things Linux Day 2017 Stefano Sanna
 
Android Things in action
Android Things in actionAndroid Things in action
Android Things in actionStefano Sanna
 
Introduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconIntroduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconStefano Sanna
 
Augmented Smartphone
Augmented SmartphoneAugmented Smartphone
Augmented SmartphoneStefano Sanna
 
Bluetooth Low Energy
Bluetooth Low EnergyBluetooth Low Energy
Bluetooth Low EnergyStefano Sanna
 
Google TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidGoogle TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidStefano Sanna
 
Enlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVEnlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVStefano Sanna
 
NFC: tecnologia e applicazioni
NFC: tecnologia e applicazioniNFC: tecnologia e applicazioni
NFC: tecnologia e applicazioniStefano Sanna
 
Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione AvanzataStefano Sanna
 
HCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsHCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsStefano Sanna
 
Android & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioniAndroid & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioniStefano Sanna
 
Application Store: opportunita' e trappole
Application Store: opportunita' e trappoleApplication Store: opportunita' e trappole
Application Store: opportunita' e trappoleStefano Sanna
 
Android Bluetooth Hacking
Android Bluetooth HackingAndroid Bluetooth Hacking
Android Bluetooth HackingStefano Sanna
 
Free Software e Open Hardware
Free Software e Open HardwareFree Software e Open Hardware
Free Software e Open HardwareStefano Sanna
 
Playing with Mobile 2.0
Playing with Mobile 2.0Playing with Mobile 2.0
Playing with Mobile 2.0Stefano Sanna
 

More from Stefano Sanna (20)

Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018
 
Android Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldAndroid Things, from mobile apps to physical world
Android Things, from mobile apps to physical world
 
Android Things Linux Day 2017
Android Things Linux Day 2017 Android Things Linux Day 2017
Android Things Linux Day 2017
 
Android Things in action
Android Things in actionAndroid Things in action
Android Things in action
 
Introduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconIntroduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeacon
 
Augmented Smartphone
Augmented SmartphoneAugmented Smartphone
Augmented Smartphone
 
Bluetooth Low Energy
Bluetooth Low EnergyBluetooth Low Energy
Bluetooth Low Energy
 
Google TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidGoogle TV: la nuova frontiera Android
Google TV: la nuova frontiera Android
 
Enlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVEnlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TV
 
Introduzione ad NFC
Introduzione ad NFCIntroduzione ad NFC
Introduzione ad NFC
 
NFC: tecnologia e applicazioni
NFC: tecnologia e applicazioniNFC: tecnologia e applicazioni
NFC: tecnologia e applicazioni
 
Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione Avanzata
 
HCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsHCIM08 - Mobile Applications
HCIM08 - Mobile Applications
 
Android & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioniAndroid & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioni
 
Application Store: opportunita' e trappole
Application Store: opportunita' e trappoleApplication Store: opportunita' e trappole
Application Store: opportunita' e trappole
 
Android Bluetooth Hacking
Android Bluetooth HackingAndroid Bluetooth Hacking
Android Bluetooth Hacking
 
Android
AndroidAndroid
Android
 
Free Software e Open Hardware
Free Software e Open HardwareFree Software e Open Hardware
Free Software e Open Hardware
 
Playing with Mobile 2.0
Playing with Mobile 2.0Playing with Mobile 2.0
Playing with Mobile 2.0
 
Sun SPOT
Sun SPOTSun SPOT
Sun SPOT
 

Java AWT

  • 1. java.awt.* CRS4 - http://www.crs4.it Abstract Window Toolkit aprile 2005 Stefano Sanna - gerda@crs4.it
  • 2. Agenda Java e interfacce grafiche ● Caratteristiche di AWT ● CRS4 - http://www.crs4.it Design e implementazione di interfacce ● grafiche Panoramica dei componenti disponibili ● Primitive grafiche e modello ad eventi ● Esempi di codice ● Bibliografia ● Conclusioni ● Stefano Sanna - gerda@crs4.it
  • 3. Java CRS4 - http://www.crs4.it Stefano Sanna - gerda@crs4.it
  • 4. Due approcci per le UI in Java Componenti heavyweight ● Sono basati su componenti forniti dal sistema – CRS4 - http://www.crs4.it operativo (scritti in C/C++): le prestazioni e l'integrazione “estetica” con le altre applicazioni è massima L'applicazione perde portabilità ove non è – disponibile la libreria Componenti lightweight ● Sono basati sull'assegnazione di una area di – disegno sul desktop, dove la VM può tracciare i componenti in piena libertà: le prestazioni non sono eccezionali ma la portabilità è assicurata! Stefano Sanna - gerda@crs4.it
  • 5. AWT e Swing AWT: Abstract Window Toolkit ● Nasce con le prime versioni di Java (1.0.2 e – CRS4 - http://www.crs4.it 1.1) Definisce un insieme minimo di componenti – nativi comuni a tutte le UI (Win32, X-Window, MacOS, SymbianOS…) Swing (JFC, Java Foundation Classes) ● Disponibili dalla versione 1.2 – Definisce un set di componenti complessi e – personalizzabili indipendenti dalla piattaforma Stefano Sanna - gerda@crs4.it
  • 6. Altre librerie: SWT e LWVCL SWT: Standard Widget Toolkit ● Utilizza componenti nativi come AWT, ma è – CRS4 - http://www.crs4.it basata su un set molto ricco E' utilizzata sull'IDE Eclipse – LWVCL: Lightweight Visual Comp Library ● E' una soluzione full-Java (come Swing) per – sistemi mobili quali palmari e cellulari Fornisce un set molto ricco di componenti e – garantisce ottime prestazioni in termini di velocità di elaborazione Stefano Sanna - gerda@crs4.it
  • 7. Abstract Window Toolkit E’ un insieme di classi per la creazione di ● interfacce grafiche elementari CRS4 - http://www.crs4.it Contiene una librerie di componenti heavy- ● weighted: ogni componente ha il suo corrispondente nel sistema operativo host, a cui la VM delega la gestione del componente vero e proprio Permette di creare componenti ● personalizzati attraverso il controllo diretto delle funzioni di disegno e di gestione dei dispositivi di input (mouse, tastiera…) Stefano Sanna - gerda@crs4.it
  • 8. Abstract Window Toolkit Coerentemente con la vocazione ● multipiattaforma di Java, i componenti AWT CRS4 - http://www.crs4.it e le applicazioni sviluppate con questi cambiano il loro aspetto a seconda del sistema operativo in cui sono eseguite Questa caratteristica da una parte limita le ● GUI in Java 1.1 (sono disponibili solo i componenti comuni a tutte le interfacce grafiche), dall’altro permette un vero sviluppo indipendente dalla piattaforma! Stefano Sanna - gerda@crs4.it
  • 9. GUI in Java: il codice L’interfaccia grafica è costruita all’interno ● del codice sorgente: non esistono i CRS4 - http://www.crs4.it resource-file! import java.awt.*; public class HelloGUI extends Frame { private Label helloLabel = new Label(quot;Hello!quot;); public HelloGUI() { this.setTitle(quot;Hello!quot;); this.add(helloLabel); this.pack(); } public static void main(String[] args) { HelloGUI myHello = new HelloGUI(); myHello.show(); } } Stefano Sanna - gerda@crs4.it
  • 10. Object Oriented Le interfacce grafiche sono costituite da ● “oggetti” e dunque la loro CRS4 - http://www.crs4.it implementazione in un linguaggio ad oggetti è abbastanza naturale Creare un nuovo oggetto grafico significa ● creare una istanza della classe corrispondente Java è completamente ad oggetti e la ● costruzione di interfacce grafiche si integra perfettamente con la filosofia del linguaggio Stefano Sanna - gerda@crs4.it
  • 11. Creazione di interfacce grafiche Creare interfacce grafiche significa ● essenzialmente: CRS4 - http://www.crs4.it 1.Istanziare e assemblare i componenti visuali con cui interagisce l’utente 2.Associare i dati dell’applicazione ai componenti visuali 3.Intercettare gli eventi dei componenti visuali e compiere opportune azioni sui dati dell’applicazione Stefano Sanna - gerda@crs4.it
  • 12. Creazione di interfacce grafiche 1.Istanziare e assemblare i componenti visuali con cui interagisce l’utente: CRS4 - http://www.crs4.it Stabilire quali sono i componenti necessari a – visualizzare i dati dell’applicazione (campi di testo, valori booleani, liste…) Organizzare i componenti in pannelli, finestre, – dialoghi Verificare la usabilità dell’interfaccia – Stefano Sanna - gerda@crs4.it
  • 13. Creazione di interfacce grafiche 2.Associare i dati dell’applicazione ai componenti visuali: CRS4 - http://www.crs4.it Fare in modo che ad una qualsiasi variazione ● dei dati (modello) dell’applicazione corrisponda un aggiornamento di quanto visualizzato dall’interfaccia grafica Prevedere opportuni raggruppamenti e/o ● separazioni per utilizzare al meglio i (pochi) componenti disponibili Stefano Sanna - gerda@crs4.it
  • 14. Creazione di interfacce grafiche 3.Intercettare gli eventi dei componenti visuali e compiere opportune azioni sui dati CRS4 - http://www.crs4.it dell’applicazione: Registrare la propria applicazione in ascolto ● degli eventi di interesse (pressione di un pulsante, uso del mouse, chiusura di una finestra…) Modificare i dati secondo le azioni compiute ● dall’utente sull’interfaccia grafica Stefano Sanna - gerda@crs4.it
  • 15. Componenti elementari Frame, Window, Dialog ● Panel e Layout Manager ● CRS4 - http://www.crs4.it Menubar, Menu, MenuItem ● Button e Label ● TextField e TextArea ● List e Choice (ComboBox) ● CheckBox e CheckBoxMenuItem ● Canvas ● Stefano Sanna - gerda@crs4.it
  • 16. java.awt.Frame E’ la classe che permette di creare finestre ● con un bordo, una barra del titolo, una CRS4 - http://www.crs4.it barra di menù (opzionale), e un’area dove assemblare i componenti dell’interfaccia grafica E’, nella maggior parte dei casi, la finestra ● principale dell’applicazione da cui si creano tutte le altre finestre (vedi: Window e Dialog) Stefano Sanna - gerda@crs4.it
  • 17. Window e Dialog Le Window sono finestre senza bordo e ● menù, utilizzate per splash screen e per CRS4 - http://www.crs4.it aree del quale il programmatore vuole controllo completo Le Dialog sono finestre (eventualmente ● modali) con il quale l'applicazione richiede l'interazione esplicita con l'utente: avvisi, inserimento di dati, conferme... Stefano Sanna - gerda@crs4.it
  • 18. java.awt.Panel Le istanze di questa classe sono contenitori ● per altri componenti CRS4 - http://www.crs4.it E’ possibile assegnare una logica di ● organizzazione dei componenti all’interno di un pannello a seconda delle esigenze di visualizzazione Le interfacce “non banali” sono costituite ● da numerosi pannelli annidati, ciascuno contenente un certo gruppo di componenti elementari o complessi Stefano Sanna - gerda@crs4.it
  • 19. Layout Manager I LayoutManager sono degli oggetti ● particolari che gestiscono il CRS4 - http://www.crs4.it posizionamento e dimensionamento dei componenti all’interno dei contenitori (Frame, Window, Dialog, Panel…). Seguendo la filosofia di Java (indipendente ● dalla piattaforma!), i LayoutManager permettono di stabilire una posizione logica (“di massima”, potremmo dire) dei componenti, delegando poi alla specifica piattaforma il reale tracciamento dei componenti. Stefano Sanna - gerda@crs4.it
  • 20. Layout Manager FlowLayout ● Dispone i componenti assegnando a ciascuno – CRS4 - http://www.crs4.it le dimensioni preferenziali BorderLayout ● Divide il container in 5 regioni (vedi – screenshot) CardLayout ● Crea uno stack di componenti che vengono – visualizzati alternativamente Stefano Sanna - gerda@crs4.it
  • 21. Layout Manager GridLayout ● Crea una griglia (n*m, con n e m assegnati) in – CRS4 - http://www.crs4.it cui dispone i componenti assegnando a ciascuno le dimensioni preferenziali GridBagLayout ● In assoluto il layout più potente e complesso; – offre una organizzazione a griglia come il GridLayout, ma consente maggiore controllo sulla posizione e dimensione dei componenti Stefano Sanna - gerda@crs4.it
  • 22. java.awt.FlowLayout È il layout di ● impostato di default CRS4 - http://www.crs4.it Dispone i ● componenti in sequenza assegnando a ciascuno le dimensioni preferenziali Stefano Sanna - gerda@crs4.it
  • 23. java.awt.BorderLayout È uno dei layout più ● utilizzati per CRS4 - http://www.crs4.it l’organizzazione di componenti su finestre di dimensione variabile. Stefano Sanna - gerda@crs4.it
  • 24. java.awt.CardLayout Mostra un ● componente per CRS4 - http://www.crs4.it volta Utile per creare ● interfacce tipo “pannello di configurazione” VISTA Stefano Sanna - gerda@crs4.it
  • 25. Layout Manager E’ comunque possibile fare a meno dei ● Manager e specificare esattamente CRS4 - http://www.crs4.it posizione e dimensione di ciascun componente. Tale scelta è consigliabile solo con componenti custom (e dunque non dipendenti dalla piattaforma) L’uso dei manager di layout è comune ad ● altri linguaggi e ambienti di sviluppo, così pure la tecnica dei pannelli annidati (VisualBasic, Delphi…) Stefano Sanna - gerda@crs4.it
  • 26. Menubar, Menu, MenuItem E’ un insieme di classi che permette di ● creare menù per i Frame e popup-menù CRS4 - http://www.crs4.it per gli altri componenti di AWT. Menubar: è il contenitore delle voci di menù – posto immediatamente sotto la barra del titolo Menu: è la classe che individua le voci visibili – su una menubar MenuItem: è la classe che – permette di creare voci di menù selezionabili dall’utente. Stefano Sanna - gerda@crs4.it
  • 27. Button e Label La classe Button permette di creare ● pulsanti da azionare con il mouse o con la CRS4 - http://www.crs4.it tastiera Le istanze di Label sono oggetti per la ● visualizzazione di testo non editabile dall’utente. Possono essere utilizzati per finestre informative o indicazioni di supporto agli altri componenti (ad esempio, per descrivere il contenuto di una certa lista di elementi) Stefano Sanna - gerda@crs4.it
  • 28. TextField e TextArea E’ la classe che permette di creare oggetti ● attraverso i quali l’utente può digitare CRS4 - http://www.crs4.it stringhe di testo Permette di gestire eventi di provenienti ● dalla tastiera (ad esempio, per offrire suggerimenti all’utente durante la digitazione) Per l’inserimento di testo su più linee è ● disponibile il componente TextArea, che permette di gestire anche le barre di scorrimento Stefano Sanna - gerda@crs4.it
  • 29. List e ComboBox Permette di mostrare una lista di elementi ● di testo CRS4 - http://www.crs4.it Offre la possibilità di aggiungere barre di ● scorrimento, di selezionare gli elementi singolarmente o a gruppi La versione Swing (JList) permette di ● visualizzare una lista di componenti grafici arbitrari (contenenti testo e immagini) La classe Chioce (ComboBox) permette la ● creazione di menù a tendina Stefano Sanna - gerda@crs4.it
  • 30. CheckBox e CheckBoxMenuItem La classe CheckBox permette di ● rappresentare valori booleani true/false CRS4 - http://www.crs4.it attraverso check box (selettori a scelta multipla) o radio button (selettori a scelta mutuamente esclusiva) I CheckBoxMenuItem permettono di gestire ● valori booleani attraverso menù dei Frame. Stefano Sanna - gerda@crs4.it
  • 31. java.awt.Canvas E’ il componente con cui è possibile ● disegnare in una regione dello schermo CRS4 - http://www.crs4.it attraverso primitive grafiche quali punti, linee, poligoni, testo, immagini… Attraverso la riscrittura di un metodo ● (paint) e le funzionalità della classe Graphics ottenuta dal framework è possibile creare effetti grafici personalizzati Numerose librerie permettono di gestire i ● più diffusi formati grafici per la visualizzazione di immagini Stefano Sanna - gerda@crs4.it
  • 32. Primitive grafiche Ogni volta che il sistema grafico deve ● ridisegnare l’area del componente viene CRS4 - http://www.crs4.it invocato il metodo paint(). Attraverso questo metodo il sistema fornisce una istanza di Graphics su cui eseguire le operazioni di disegno. Il Canvas, oltre ad un’area di disegno, ● mette a disposizione tutta l’infrastruttura per la gestione degli eventi associati al componente: mouse, tastiera, interazione con gli altri componenti. Questo permette di realizzare componenti personalizzati. Stefano Sanna - gerda@crs4.it
  • 33. Primitive grafiche import java.awt.*; An instance of Graphics public class MyComponent extends Canvas { CRS4 - http://www.crs4.it public void paint(Graphics g) { g.drawLine(……………..) } } L’utente sposta la finestra… Stefano Sanna - gerda@crs4.it
  • 34. Event Driven Nello sviluppo di applicazioni con ● interfaccia utente a linea di comando vi era CRS4 - http://www.crs4.it un unico flusso all’interno del programma (ricordate scanf o readln?) Le interfacce grafiche permettono ● all’utente di selezionare diversi dispositivi di input indipendenti (tastiera, mouse…) che agiscono su numerosi componenti dell’interfaccia stessa: non esiste più un unico flusso all’interno del programma, non si può rimanere in attesa di uno specifico segnale… Stefano Sanna - gerda@crs4.it
  • 35. Event Driven Le nuove interfacce grafiche hanno portato ● alla definizione di un nuovo modello di CRS4 - http://www.crs4.it interazione con l’utente: gli eventi Non vi sono routine bloccanti che ● controllano i dispositivi di input (come scanf in C…): il sistema operativo nasconde tutta la gestione dei dispositivi di input L’applicazione definisce una interfaccia con ● cui il sistema operativo comunica in modo asincrono i comandi (pulsante premuto, testo digitato, finestra ridimensionata…) Stefano Sanna - gerda@crs4.it
  • 36. Event Sequence Diagram CRS4 - http://www.crs4.it Stefano Sanna - gerda@crs4.it
  • 37. Event Driven import java.awt.*; public class HelloGUI extends Frame { private Label helloLabel = new Label(quot;Hello!quot;); CRS4 - http://www.crs4.it public HelloGUI() { this.setTitle(quot;Hello!quot;); this.add(helloLabel); this.pack(); } public void actionPerformed(ActionEvent ae) { ************ ********** } } Gli eventi passano da un livello all’altro in maniera • trasparente per l’utente: • Window Message in Win32 • Native method nella JVM • Pure Java dal pulsante in poi Sistema operativo Stefano Sanna - gerda@crs4.it
  • 38. Event Driven connect() showWindow() Listener 1 CRS4 - http://www.crs4.it startTime() Listener 2 Event Source Listener n-1 Listener n Stefano Sanna - gerda@crs4.it
  • 39. MouseMotionListener WindowListener CRS4 - http://www.crs4.it Frame Virtual Machine MouseListener ActionListener interface class Stefano Sanna - gerda@crs4.it
  • 40. Listener ActionListener ● intercetta eventi di azioni (pulsanti, menù, – CRS4 - http://www.crs4.it pressione del tasto INVIO su un TextField) WindowListener ● intercetta gli eventi legati alla gestione di – Frame, Window e Dialog (visualizza/nascondi) MouseListener ● intercetta gli eventi del mouse (entrata/uscita – in una certa zona, pressione dei tasti…) MouseMotionListener: ● intercetta il movimento (semplice o drag) – Stefano Sanna - gerda@crs4.it
  • 41. Listener Vi sono altri tipi di listener per gestire gli ● eventi della tastiera, di digitazione testo, CRS4 - http://www.crs4.it del ciclo di vita dei componenti, del focus tra i componenti… Ciascun tipo di listener è specializzato per ● un ben determinato tipo di eventi. Questi, a loro volta, sono destinati a notificare solo un ben determinato tipo di azione fatta sull’interfaccia grafica Stefano Sanna - gerda@crs4.it
  • 42. Domande? CRS4 - http://www.crs4.it Stefano Sanna - gerda@crs4.it
  • 43. Mano al codice!!! … e alla documentazione!!! Le classi sono contenute all’interno dei ● CRS4 - http://www.crs4.it package java.awt, java.awt.event, java.awt.image, java.awt.datatransfer, java.applet. Per scrivere delle buone interfacce grafiche ● sarebbe opportuno avere una buona conoscenza del linguaggio e della programmazione ad oggetti (polimorfismo, classi inner, interfacce, design pattern…). Stefano Sanna - gerda@crs4.it
  • 44. Componenti disponibili Button, Canvas, Checkbox, ● CheckboxGroup, CheckboxMenuItem, CRS4 - http://www.crs4.it Choice, Dialog, FileDialog, Font, Frame, Image, Label, List, Menu, MenuBar, MenuItem, Panel, ScrollPane, TextArea, TextField, Window… Stefano Sanna - gerda@crs4.it
  • 45. Una semplice finestra import java.awt.*; public class SimpleFrame1 extends Frame { private Label titleLabel = new Label(quot;Simple Framequot;); CRS4 - http://www.crs4.it public SimpleFrame1() { this.setLayout(new FlowLayout()); this.setTitle(titleLabel.getText()); this.add(titleLabel); this.pack(); this.show(); } public static void main(String[] args) { new SimpleFrame1(); } } Stefano Sanna - gerda@crs4.it
  • 46. Aggiungiamo un menù... public class SimpleFrame2 extends Frame { private Label titleLabel = new Label(quot;Simple Framequot;); private MenuBar menuBar = new MenuBar(); CRS4 - http://www.crs4.it private Menu fileMenu = new Menu(quot;Filequot;); private MenuItem exitMenuItem = new MenuItem(quot;Exitquot;); public SimpleFrame2() { this.setMenuBar(menuBar); menuBar.add(fileMenu); fileMenu.add(exitMenuItem); this.setLayout(new FlowLayout()); this.setTitle(titleLabel.getText()); this.add(titleLabel); this.pack(); this.show(); } Stefano Sanna - gerda@crs4.it
  • 47. MouseMotionListener WindowListener CRS4 - http://www.crs4.it Frame Virtual Machine MouseListener ActionListener interface class Stefano Sanna - gerda@crs4.it
  • 48. Gestire gli eventi PRODUCER CONSUMER Registers itself as listener… CRS4 - http://www.crs4.it LISTENERS Invokes listener’s methods actionPerformed… Stefano Sanna - gerda@crs4.it
  • 49. Gestire gli eventi Ciascun producer dispone di una lista di ● listener (ascoltatori) interessati a gestire gli CRS4 - http://www.crs4.it eventi prodotti dal producer stesso Per poter ricevere notifica di nuovi eventi i ● listener devono implementare l’interfaccia relativa ad una specifica classe di eventi e registrarsi presso il producer Il producer, al manifestarsi di un evento, ● invocherà i metodi dell’interfaccia dei listener inviando come parametri degli EventObject specifici per il tipo di evento Stefano Sanna - gerda@crs4.it
  • 50. Gestire gli eventi I passi nella realizzazione del modello ad ● eventi: CRS4 - http://www.crs4.it Creazione di un listener per il tipo di evento di – interesse (ActionListener, MouseListener, MouseMotionListener, TextListener, ComponentListener…) attraverso l’implementazione di una opportuna interfaccia Registrazione del listener appena creato nella – lista ascoltatori del producer Stefano Sanna - gerda@crs4.it
  • 51. Gestire gli eventi ... implements ActionListener ... public void actionPerformed(ActionEvent ae) { CRS4 - http://www.crs4.it if (ae.getSource() == exitMenuItem) { System.exit(0); } } exitMenuItem.addActionListener(this); La classe dichiara di voler (saper…) gestire ● ActionEvent e implementa il metodo actionPerformed La classe registra se stessa quale ● ascoltatore degli eventi del menù Stefano Sanna - gerda@crs4.it
  • 52. Pannelli annidati CRS4 - http://www.crs4.it FlowLayout BorderLayout Stefano Sanna - gerda@crs4.it
  • 53. Componenti personalizzati Grazie all’architettura object oriented è ● semplice sviluppare componenti CRS4 - http://www.crs4.it personalizzati estendendo quelli esistenti o creandone di completamente nuovi Possiamo ereditare dalla classe Component ● tutta la gestione del mouse, della tastiera e degli altri eventi correlati senza la necessità di scrivere codice nativo Se scritti in modo sapiente (!) i nuovi ● componenti si integreranno perfettamente con l’infrastruttura AWT Stefano Sanna - gerda@crs4.it
  • 54. Bibliografia Java AWT Reference ● John Zukowski CRS4 - http://www.crs4.it O'Reilly 1997 Il libro non è più in stampa, ma l'editore mette a disposizione gratuitamente i file PDF di tutti i capitoli: http://www.oreilly.com/catalog/javawt/book/index.html Stefano Sanna - gerda@crs4.it
  • 55. Conclusioni Java AWT è uno strumento rapido e ● multipiattaforma per la creazione di CRS4 - http://www.crs4.it interfacce semplici Lo sviluppo di applicazioni complesse ● richiede l'uso di librerie più complete (ad esempio, Swing o LWVCL) AWT è una buona palestra per imparare il ● modello ad eventi!!! Stefano Sanna - gerda@crs4.it
  • 56. Grazie... :-) CRS4 - http://www.crs4.it Copyright (c) 2004-2005 CRS4 Scritto da Stefano Sanna (gerda@crs4.it) è garantito il permesso di copiare, distribuire e/o modificare questo documento seguendo i termini della Licenza per Documentazione Libera GNU, Versione 1.1 o ogni versione successiva pubblicata dalla Free Software Foundation. Una copia della licenza in lingua italiana è disponibile presso: http://www.softwarelibero.it/gnudoc/fdl.it.html Stefano Sanna - gerda@crs4.it