Swing.

Slides:



Advertisements
Presentazioni simili
Java e le interfacce grafiche
Advertisements

Unit à E4 Applet. Obiettivi Saper progettare e realizzare Applet Java allinterno di pagine HTML Comprendere le interazioni tra il browser e lapplet Saper.
Applet Java.
Informatica Recupero debito quarto anno Terzo incontro.
Unit à E3 Eventi. Obiettivi Conoscere il concetto di evento e gestore di evento Conoscere i pulsanti in Swing e la gestione dellevento clic Saper gestire.
CONOSCIAMO IL WINDOWS '95.
Java: programmazione concorrente con condivisione di memoria
Università degli Studi di Modena e Reggio Emilia
GUI Graphical Users Interfaces
Programmazione ad Eventi
Grafica Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
Layouts and Graphics. component - container - layout Un Container contiene [0 o +] Components Il Layout specifica come i Components sono disposti nel.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Swing e la programmazione a eventi
Swing e la programmazione a eventi
1 Eventi/2 Più movimento alle classi. 2 Eventi Java Modo per intercettare il verificarsi di certe condizioni / azioni e fare in modo che venga eseguito.
1 Grafica ed eventi/2 Più movimento alle classi. 2 Esercizio n.1 Realizzare una applicazione che permette il trascinamento di una ellissi allinterno di.
Più movimento alle classi
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 81 Gestione dei colori La gestione dei colori in AWT consente di specificare un qualunque.
AA2003/04 © M.A. Alberti Programmazione Interfacce 1 Programmazione Corso di laurea in Informatica.
Primi Elementi di Programmazione in C++
Design Pattern Observer INGEGNERIA DEL SOFTWARE Nicola Ferrari.
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Sistemi Operativi GESTIONE DEI PROCESSI.
Windows Sistema operativo con interfaccia grafica per PC IBM compatibili (varie versioni dal 95) La gestione dei file viene fatta secondo le modalità.
1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Web Part e controlli di login Elaborazione di Franco Grivet Chin.
APPLICAZIONI & APPLET Java è un ottimo linguaggio per costruire applicazioni anche non per Internet anche non grafiche ma si è diffuso storicamente, e.
DBMS ( Database Management System)
Introduzione alla modellazione di sistemi interattivi
Centro Informatico Multimediale Modulo 2 – Utilizzo e gestione dei file.
Modulo 7 – reti informatiche u.d. 3 (syllabus – )
Un report è in grado di personalizzare la stampa delle informazioni rispetto alla stampa di una tabella, di un recordset o di una maschera. I report possono.
66. Rubrica La Rubrica vi consente di raccogliere gli indirizzi di posta elettronica. Potete accedere dalla rubrica dallinterno del programma di posta.
Federico Vigna - 22/09/04 Framework didattico per lo sviluppo di applicazioni per basi di dati Università degli studi “Roma Tre” Dipartimento di informatica.
Linguaggi e modelli computazionali LS Manni Tiziano
Threads.
Esercizi Design pattern
Esercizi Swing.
Aggiungiamo Elementi al Frame Per poter posizionare un elemento all'interno di un frame dobbiamo utilizzare il "layout manager". Ogni contenitore (Container)
INTRODUZIONE A JAVASCRIPT
Introduzione. Introduzione Un’applet Java: Una applet ("applicazioncina") è una applicazione non autonoma, ma pensata per far parte di una pagina Internet.
Docente: Simone Zambenedetti. Tip and Tricks : Moduli utili (Back to Top, External links, References Dialog, Module Filter)
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Libreria standard.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Java gestione eventi introduzione. La gestione degli eventi Ci sono 3 oggetti interessati alla g. d. e.: L’oggetto interessato (event source) ad esempio.
Cryptophone 2 Matteo Ferrari. Descrizione del Problema e Soluzioni adottate. Realizzare un’interfaccia grafica in C# per dispositivi Mobile di un progetto.
I processi.
Il Sistema Operativo Il Sistema Operativo è costituito dall’insieme dei programmi necessari per far funzionare tutto l’hardware del calcolatore e per nascondere.
Programmazione ad oggetti
Realizzato dagli stagisti media educator Per creare un utente andate su Amministrazione del sito -> Utenti -> Profili -> Nuovo utente. L'username.
Programmazione ad oggetti
1 Esercitazione Sistemi distribuiti: sistemi che risisedono su più calcolatori interconnessi da una rete di comunicazione Algoritmi distribuiti: programmi.
Microsoft Access Maschere (II).
Diagramma delle Classi
Interfacce grafiche Capitolo 27 marzo 2004 Interfacce grafiche.
Timer Animazioni.
Tag FRAMESET. I frame sono un particolare tipo di struttura HTML, che consente di suddividere la finestra del browser in diversi riquadri distinti. Un'insieme.
ESPANSIONE Personalizzare l’interfaccia utente 2010.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
MCSA Mobile Code System Architecture Infrastruttura a supporto della code mobility Pierfrancesco Felicioni Reti di Calcolatori L.S. 2005/2006.
La gestione degli eventi
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
Esercitazione  obiettivo: scrivere una applicazione per il gioco “Centra Bersaglio”  metodo individuazione e definizione delle classi necessarie.
Sistemi operativi di rete Ing. A. Stile – Ing. L. Marchesano – 1/18.
ELABORAZIONE TESTI MICROSOFT WORD EM 09.
Cloud Tecno V. Percorso didattico per l’apprendimento di Microsoft Access 4 - Le maschere.
Utilizzo e gestione dei file Filippo Petroni
UNIMORE University of Modena and Reggio Emilia Scratch Simone Calderara
Gestire la navigazione. Creare un’app multi Controller La quasi totalità delle app è suddivisa in più ViewControllers, ognuno con specifiche funzionalità.
Transcript della presentazione:

Swing

Modello ad eventi I componenti interagiscono attraverso l’invio di messaggi broadcast o multicast “Attenzione! C’è un incendio” “Si avvisano i signori passeggeri che …” Ogni componente notifica un cambiamento nel proprio stato o in quello dell’ambiente inviando un messaggio In tal caso agisce da “generatore dell’evento” Tutti i componenti interessati all’evento descritto da tale messaggio ne ricevono copia In tal caso agiscono da “ascoltatori dell’evento” In generale, il generatore dell’evento non conosce né il numero né l’identità degli ascoltatori

Modello ad eventi Con il paradigma a eventi L’applicazione è puramente “reattiva” Non è possibile identificare staticamente un flusso di controllo unitario Il programma principale si limita a inizializzare l’applicazione, istanziando gli osservatori e associandovi gli opportuni handler

Modello ad eventi Utili per sistemi altamente dinamici ed evolutivi, in cui nuovi moduli si possono aggiungere o possono essere eliminati Per comunicare tra di loro, i moduli non devono conoscere le rispettive identità come invece accade con gli altri oggetti Java nomeModulo.nomeServizio (parametri) Si parla più in generale di paradigma di progettazione "publish and subscribe" moduli che generano eventi ("publish") moduli che sottoscrivono l'interesse ad essere notificati dell'occorrenza di certi eventi ("subscribe")

Observer Pattern Publish-Subscribe Pattern "Don't call us. Give us your telephone number, and we will call you if and when we have a job for you.” [Hollywood Principle] “Instead of your program running the system, the system runs your program”

javax.swing Un’applicazione può essere costruita come componenti che interagiscono attraverso eventi Tutti i componenti di una determinata interfaccia possono generare determinati eventi mettersi in ascolto di determinati eventi Vediamo il package javax.swing che fornisce le classi che consentono la progettazione delle interfacce utente secondo lo stile ad eventi Altre librerie interessanti: Java2D, Java3D…

GUI GUI: Graphical User Interface L'interfaccia utente costituisce il mezzo con il quale l'utente interagisce con l'applicazione costituisce il "look&feel" Fondamentale per l'usabilità del software Dev’essere progettata con cura Non è un lavoro da ingegneri progettarla, lo è implementarla

Separare GUI e parte funzionale La GUI si preoccupa di interagire con l'utente visualizzare accettare input La parte funzionale contiene la logica applicativa GUI modificabile senza toccare la parte funzionale e viceversa Diverse strategie "look&feel" per la stessa applicazione Spesso le modifiche si incentrano sulla GUI al fine di migliorare l'usabilità

MVC: Model View Controller Swing si basa su un “paradigma” di progettazione che si incontra anche in altri campi: Un componente ha un suo “modello logico” Un componente ha un suo “aspetto visuale” Un componente ha “comportamenti” che consentono la sua interazione con il resto dell’applicazione Esempio -> JButton Model: Premuto/Rilasciato (variabile booleana) View: Dipende dal look&feel Controller: Sulla base dell’input utente (bottone premuto) aggiorna il Model o implementa la logica applicativa. In Java: ActionPerformed della classe ActionListener collegata al JButton

MVC: Model View Controller L’obiettivo del paradigma MVC è quello di disaccoppiare il dato dal suo comportamento e dalla sua view. Non è sempre possibile farlo.

AWT / Swing Abstract Windowing Toolkit (AWT) Swing È la precedente versione delle librerie grafiche di JAVA. Fornisce ancora alcuni importanti componenti per il funzionamento e la creazione dell’ interfaccia Swing Consentono di realizzare applicazioni con un “look and feel” più aggiornato e elegante Si basano su un modello di interazione introdotto da JAVA2 Hanno superato alcuni dei difetti di AWT Chiedono servizi al sistema operativo, ma (normalmente) ad un livello più basso e riescono così ad avere un maggiore controllo del “look and feel” Sono una “estensione” del core di JAVA e possono risultare più complesse da programmare Consentono un maggior controllo del look&feel di un’applicazione e garantiscono il medesimo look&feel su tutte le piattaforme

AWT / Swing Il nome di tutti i componenti Swing inizia con J La convenzione è JXxxx I componenti Swing sono lightweight Un componente lightweight implementa il suo look-and-feel direttamente in Java senza delegarlo al sistema operativo che ospita l’applicazione Maggior uniformità di comportamento È bene non includere componenti Swing ed AWT in una stessa interfaccia: I componenti AWT (heavyweight) vengono sempre mostrati “sopra” i componenti Swing (ad esempio con i Menu) Problema dovuto alla mancanza di compatibilità fra i due framework

Un’interfaccia Swing Tre elementi fondamentali Contenitori Elementi grafici Eventi

Frame Un frame Definisce l’intelaiatura dell’interfaccia Fornisce un rettangolo, “decorato” alla maniera delle finestre cui siamo abituati È un oggetto complesso

javax.swing.JFrame Come in tutta la programmazione ad oggetti occorre conoscere la “gerarchia” entro la quale si colloca JFrame Per conoscere la “derivazione” di ogni oggetto delle librerie GUI di Swing si deve fare ricorso alla documentazione on line di Java

Scorrendo la gerarchia Component “A component is an object having a graphical representation that can be displayed on the screen and that can interact with the user. Examples of components are the buttons, checkboxes, and scrollbars of a typical graphical user interface” Component è quindi una classe molto generale e definisce un sacco di metodi Container Un Component con la proprietà di essere abilitato a contenere altri Component Prevede metodi di tipo “add” per aggiungere componenti Prevede anche metodi per rappresentare il contenitore e i suoi contenuti e per aggiornarne l’immagine

Scorrendo la gerarchia Window È un particolare contenitore che può apparire sullo schermo come entità propria, ma non ha bordi, barre e controlli Possiede metodi per mostrare la finestra, nascondere la finestra, posizionare la finestra e aggiustare l’ordine di comparizione relativamente ad altre finestre Frame Si tratta di Window con bordi e barra del titolo, oltre alle caratteristiche solite di un’interfaccia (minimizzazione, iconizzazione, chiusura, resizing) JFrame È un Frame AWT a cui SWING aggiunge una serie di metodi per ridefinire i dettagli grafici. Ad esempio ll metodo setSize(int l, int h) permette di determinare le dimensioni del Frame Il metodo setLocation(int x, int y) consente di definire le coordinate del pixel in alto a sinistra del frame nel riferimento dello schermo

Cosa possiamo fare con un JFrame? Non possiamo disegnare, scrivere o aggiungere elementi direttamente al Frame Gli elementi diversi dal Menu debbono essere “aggiunti” ad un Container opportuno Ad esempio Per scrivere del testo dentro un Frame, il testo dovrà essere scritto (aggiunto) al pannello contentPane del JFrame Il metodo add() di JFrame si occupa di tutto il lavoro frame.getContentPane().add(label); frame.add(label);

Look and feel

Aggiungiamo componenti Dobbiamo sapere: Da dove prendere i componenti? Una lista/descrizione delle librerie disponibili Come costruirli e personalizzarli? Costruttori e modificatori Come usarli? Quali eventi sono in grado di raccogliere e quali i listener necessari Come disporli sui frame che costituiscono la nostra applicazione? Layout manager

Layout Java gestisce la disposizione dei componenti dentro i Container mediante oggetti che si chiamano LayoutManager Incapsulano gli algoritmi per il posizionamento delle componenti di una GUI Il LayoutManager mantiene l’algoritmo separato in una classe a parte È un’interfaccia che descrive come un componente deve comunicare con il suo LayoutManager Esiste un’ampia collezione di LayoutManager, ma se si vuole si può creare il proprio Più comuni FlowLayout, BorderLayout, GridLayout, CardLayout e GridBagLayout L’associazione avviene tramite il metodo setLayout() di cui è provvista la classe Container (e quindi tutte le sue sottoclassi) p.setLayout(new BorderLayout());

BorderLayout Definisce 5 aree logiche: NORTH, SOUTH, CENTER, EAST e WEST Richiede la dimensione preferita del componente (altezza e larghezza) Se il componente è NORTH o SOUTH setta l’altezza al valore preferito e la larghezza in modo da occupare tutto lo spazio orizzontale Se il componente è EAST o WEST setta la larghezza al valore preferito e l’altezza in modo da occupare tutto lo spazio verticale restante Se il componente è CENTER setta l’altezza e la larghezza in modo da occupare tutto lo spazio centrale restante Quindi Le posizioni NORTH e SOUTH servono quando vogliamo fissare l’altezza di un componente al valore preferito Le posizioni EAST e WEST servono quando vogliamo fissare la larghezza di un componente al valore preferito La parte CENTER è quella che si espande

GridLayout

Eventi L’interazione tra gli elementi dell’interfaccia e la logica applicativa è gestita tramite eventi Gli EventListener sono interfacce definite per catturare e processare tipi di eventi particolari Un listener deve Essere associato al componente Essere informato quando il componente genera un evento del tipo richiesto Rispondere facendo qualcosa di appropriato

EventHandler Devono avere tre pezzi di codice Dichiarazione Estendono o implementano listener esistenti public class MyClass implements ActionListener { Associazione tra handler (ovvero listener) e istanza someComponent.addActionListener(instanceOfMyClass); Definizione del codice che implementa i metodi dell’interfaccia listener public void actionPerformed(ActionEvent e) { ...

Demo

Demo

Eventi e Listener

Esempio

Esempio

GUI Swing - multithreading Quando si scrive una GUI Swing si assiste a un cambio di paradigma Programma con flusso centralizzato -> programma reattivo basato su eventi Per questo motivo le Swing adottano un’architettura multi-thread Ciò permette di ottenere interfacce sempre reattive e che non si “bloccano” Esempio: se ho un client di posta elettronica e qualcuno mi spedisce un messaggio di 10M voglio comunque potere: vedere l’intestazione della mail, vedere una barra che mi indica quanto manca al download, scrivere una nuova mail nel frattempo, ecc.

3 tipi di thread - thread iniziale Il thread iniziale instanzia la GUI e prosegue con le sue operazioni

3 tipi di thread - EDT EDT: Event Dispatch Thread Tutto il codice per la gestione dell’interfaccia grafica viene eseguito dentro l’EDT Esiste una coda di eventi di sistema che raccoglie i click del mouse, la pressione sui tasti della tastiera, ecc. L’EDT controlla ciclicamente la coda Raccoglie un evento e decide cosa farne Se è un click su un bottone chiama il metodo per la gestione del click del mouse su quel bottone La gestione mediante coda garantisce che venga rispettato un certo ordine nella gestione degli eventi

Perché EDT? Immaginiamo cosa sarebbe successo se non avessimo avuto l’EDT Ipotizziamo di avere due tasti: A e B Tasto A Legge il contenuto di un file e lo presenta all’utente all’interno di una textBox Tasto B Legge dallo stesso textBox e scrive i contenuti su un file Cosa succede se premo molto velocemente prima A e poi B? Probabilmente avrei un comportamento anomalo È per questo che tutto ciò che lavora sull’interfaccia gira all’interno di un unico thread

SwingUtilities Il modo giusto di inizializzare una GUI quindi non è quello che abbiamo visto prima, ma… SwingUtilities.invokeLater( new Runnable() { public void run() { createAndShowGUI(); } }) In questo modo creo un oggetto Runnable (il quale si occupa di creare l’interfaccia) e chiedo che venga gestito dall’EDT

La coda degli eventi di sistema

Progettazione di un’interfaccia Per avere una buona interfaccia grafica bisogna essere reattivi Bisogna dare l’impressione all’utente che sia sempre sotto controllo Il segreto è cercare di scrivere EventListener che siano veloci In questo modo eviteremo situazioni in cui un click può portare a una lunga attesa prima di vedere un risultato Ma se devo fare qualcosa che richiede tempo? Come faccio? Dobbiamo introdurre il terzo tipo di thread

3 tipi di thread - Worker Thread Il Worker thread viene creato dal programmatore per l’esecuzione di compiti gravosi in background

Per chi vuole approfondire… Il modo giusto è quello di usare un oggetto SwingWorker Definisce un metodo che si occupa del lavoro in background, e un secondo metodo che invece verrà eseguito nell’EDT e che fa da ponte tra il background thread e la GUI