Docente: Gabriele Lombardi

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Java e le interfacce grafiche
DBMS (DataBase Management System)
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.
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.
Capitolo 8 Array Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl.
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
Programmazione Ingegneria TLC
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
LIP: 4 Aprile 2008 ECCEZIONI. Eccezioni Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Università degli Studi di Modena e Reggio Emilia
Il linguaggio java Esercitazioni del corso di Sistemi Informativi
Fondamenti di Informatica
GUI Graphical Users Interfaces
S.I.S.S.I.S. Catania 2002/03 LE APPLET JAVA Prof. D. Cantone Amuso Raffaele.
Modulo o Form in Html.
Programmazione ad Eventi
Grafica Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Swing e la programmazione a eventi
Swing e la programmazione a eventi
Introduzione a JFC/Swing
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.
Più movimento alle classi
ingredienti fondamentali e tecniche di base
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 81 Gestione dei colori La gestione dei colori in AWT consente di specificare un qualunque.
Struttura dei sistemi operativi (panoramica)
Primi esempi di interfacce grafiche con Android
Docente: Gabriele Lombardi
© CEFRIEL Ricettario dei principali pattern GoF Docente: Gabriele Lombardi
© CEFRIEL Alcune API di base nel JDK J2SE Docente: Gabriele Lombardi
© CEFRIEL Concorrenza (cenni) Docente: Gabriele Lombardi
Sistemi Operativi GESTIONE DEI PROCESSI.
Architettura Java/J2EE
IL CONCETTO DI PACKAGE Una applicazione è spesso composta di molte classi (eventualmente correlate) Un package è un gruppo di classi che costi- tuiscono.
JAVA E LA GRAFICA L’architettura Java è graphics-ready
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
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.
Lezione 17 Riccardo Sama' Copyright Riccardo Sama' Access.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Introduzione. Introduzione Un’applet Java: Una applet ("applicazioncina") è una applicazione non autonoma, ma pensata per far parte di una pagina Internet.
Introduzione a Windows Lezione 2 Riccardo Sama' Copyright  Riccardo Sama'
Java gestione eventi introduzione. La gestione degli eventi Ci sono 3 oggetti interessati alla g. d. e.: L’oggetto interessato (event source) ad esempio.
OOP per la simulazione di sistemi reali. di Gianfranco Gallizia.
Interfacce grafiche Capitolo 27 marzo 2004 Interfacce grafiche.
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Timer Animazioni.
Lezione 19 Riccardo Sama' Copyright  Riccardo Sama' Access.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Esercizio ODBC. Configurare il driver ODBC Start  Control Panel  Administrative Tools Aprire: Data Source(ODBC) User DSN  Add…. Selezionare il driver.
Capitolo 12 Thread Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
Gestione dei thread in Java
Java terzo contatto Swing Java.
Esercizio ODBC Roberto Pecchioli, Nicola Salotti, Massimiliano Sergenti - Gruppo Admin.
Cloud Tecno V. Percorso didattico per l’apprendimento di Microsoft Access 4 - Le maschere.
Transcript della presentazione:

Docente: Gabriele Lombardi lombardi@dsi.unimi.it AWT e Swing Docente: Gabriele Lombardi lombardi@dsi.unimi.it © 2010 - CEFRIEL

The present original document was produced by CEFRIEL and the Teacher for the benefit and internal use of this course, and nobody else may claim any right or paternity on it. No right to use the document for any purpose other than the Intended purpose and no right to distribute, disclose, release, furnish or disseminate it or a part of it in any way or form to anyone without the prior express written consent of CEFRIEL and the Teacher. © copyright Cefriel and the Teacher-Milan-Italy-23/06/2008. All rights reserved in accordance with rule of law and international agreements. © 2010 - CEFRIEL

Sommario Toolkits AWT AWT: Packaging AWT: Varie Swing Swing: MVC SLIDE CONTENUTO Toolkits Cosa sono e che tipologie ne esistono AWT Peers, componenti, gestione eventi AWT: Packaging Contenitori e layout managers AWT: Varie Colori, font, geometria, immagini, stampa, … Swing Problemi di AWT? Soluzione? Swing: MVC Analisi di un componente di esempio Swing: Varie Rassegna dei componenti © 2010 - CEFRIEL

Toolkits Scopo: interfacce uomo-macchina (grafiche); consentire al programmatore di definire: interfacce uomo-macchina (grafiche); in maniera semplice (dichiarativa); pienamente funzionanti: gestione “interna” degli eventi (dell’utente); gestione “esterna” degli eventi (dell’utente); Tipologie: costruttive: la struttura dati contenente gli “oggetti grafici” viene costruita dal programmatore: GTK, QT, MFC, AWT, Swing, … dichiarative: la struttura dati contenente gli “oggetti grafici” viene definita tramite un apposito linguaggio: Glade, XUL, XAML, … © 2010 - CEFRIEL

Primo toolkit per interfacce grafiche in Java: AWT Primo toolkit per interfacce grafiche in Java: basato sull’idea di riutilizzo dei toolkit esistenti; definito attorno al concetto di peers: ogni componente è un wrapper per un componente del sistema grafico ospitante; offre un’infrastruttura di accesso a componenti: esistenti nel sistema operativo ospitante; quindi solo un subset comune hai SO considerati (massimo subset comune). Vantaggi: molto efficiente. Svantaggi: autolimitato dal rodotto subset di componenti esterne. © 2010 - CEFRIEL

AWT: Packaging Problema: panelli, finestre, … componenti in generale! definire il layout delle componenti uno nell’altro; astrazione dei contenitori: panelli, finestre, … componenti in generale! Soluzione: definire i “gestori di layout” come astrazione di … “coloro che impacchettano i componenti”; realizzare differenti implementazioni per ottenere svariate modalità di “impacchettamento”: box, flow, grid, gridbag, … parametri di preferenza per il packaging: dimensioni massime, minime, preferite; tipo di layout; ordine e posizione di inserimento; … © 2010 - CEFRIEL

AWT: Gestione degli eventi Ogni evento: è un oggetto istanziato quando si verifica; deriva direttamente o indirettamente da EventObject; trasporta le informazioni che lo caratterizzano; viene passato ai gestori di quel tipo di evento. Ogni gestore: implementa l’interfaccia (marchio) EventListener; di solito implementa direttamente un’interfaccia che estende la precedente, aggiungendo gli handler; il nome degli handler è del tipo “*Listener”; esistono spesso degli adapter, implementano tutte le risposte vuote (di cui fare override) comodità! vedere Code\03_AWT&Swing\AWT con: esempio di base di creazione di una finestra packaging di componenti cattura di un evento Usiamolo!!! © 2010 - CEFRIEL

rendering, dimensioni, glifi, … java.awt.print: java.awt.color: gestione di due aspetti relativi al colore: spazio colore: RGB, Ycbcr, Luv, Lab, XYZ, HSV, … profilo: numero, codifica e posizione delle componenti: RGB, RGBA, ARGB, ABGR, 8 bit, 12 bit, … java.awt.font: gestione delle famiglie/tipologie/sottotipologie di font; gestione del loro aspetto grafico: rendering, dimensioni, glifi, … java.awt.print: strumenti di impaginazione della stampa. © 2010 - CEFRIEL

* java.awt.** java.awt.geom: forme geometriche: trasformazioni: strumenti di geometria 2D: forme geometriche: punti, linee, curve, archi, rettangoli, … trasformazioni: similarità, affinità, … java.awt.image: memorizzazione: strategie di buffering; formato dei dati (colormodel); trasformazione: affine, … filtering: lineare (convoluzione con kernel); generale (tramite ImageFilter); inoltre: SampleModel, PixelGrabber, ImageProducer, ImageConsumer, ImageObserver, LookupTable, … * © 2010 - CEFRIEL

Swing: intro Problemi con AWT? Soluzione di Swing: componenti limitate (subset comune); impossibile realizzare componenti custom; chiamate indirette al SO tramite wrapper. Soluzione di Swing: costruire le proprie componenti da zero: all’interno di un java.awt.Component; le componenti si disegnano da sé; Swing gestisce eventi di livello più basso; vantaggi di questa piccola evoluzione: set ampio di componenti preconfezionate; architettura indipendente dai peer  MVC; possibile creare componenti custom; efficiente essendo basato su Java2D … … che si appoggia su OpenGL o su DirectX. © 2010 - CEFRIEL

Swing: intro Dove cosa: … altre nei sotto-package; componenti in javax.swing.** … … altre nei sotto-package; tutte le componenti si chiamano javax.swing.J*; componenti figlie di JComponent: possiamo estendere questa componente noi stessi per creare componenti custom; nuove implementazioni di LayoutManager … … input, PLAF, eventi, e molto altro! Ricordarsi però che: Swing si appoggia ad AWT: spesso è richiesto l’utilizzo di package in esso contenuti (come java.awt.event.*); l’utilizzo CONSAPEVOLE di IDE con designer è consigliabile. © 2010 - CEFRIEL

Swing: esempio Esercizio 1: si costruisca un’applicazione grafica che: mostri una calcolatrice semplice; implementi le 4 operazioni algebriche +, -, *, /; implementi la funzionalità di memorizzazione: tasti MS e MR per salvare in memoria e per recuperare il valore; tasti M+ e M- per aggiungere e togliere al contenuto della memoria. Esercizio 2: si costruisca, utilizzando NetBeans: un’applicazione grafica di visualizzazione risultati query: funzionalità: mostrare su richiesta il contenuto delle tabelle di un database:  show tabellaUtenti  Pippo DePippis Papero DePaperis … … createne l’interfaccia, e inizialmente utilizzate funzionalità di quering fittizie, con java.sql potremo renderle reali query verso un database. © 2010 - CEFRIEL

Swing: MVC MVC (Model View Controller): Model  la struttura dati; pattern di separazione delle responsabilità sui dati; spesso usato per le interfacce grafiche; identifica i seguenti ruoli di manipolazione di una struttura dati: Model  la struttura dati; View  la rappresentazione (grafica) dei dati; Controller  gli algoritmi di modifica dei dati. In Swing: le componenti hanno lo scopo di permettere la visualizzazione e la generazione di eventi di manipolazione di dati (da parte dell’utente); i modelli ne rappresentano la struttura (ad es. ListModel); le viste sono le componenti grafiche; i controller sono ascoltatori di eventi (Listener). Vediamo: un esempio di utilizzo delle liste: lista di file come modello in una componente JList; si veda 03_AWT&Swing\Swing\SwingExamples01: sono stati inseriti svariati widget come esempio; si osservi il funzionamento della lista di file (con la classe FilesListModel realizzata come classe innestata di GeneratedExample). © 2010 - CEFRIEL

Swing: esempio liste Definiamo un modello di lista basato sul private static class FilesListModel implements ListModel { private String[] names; public FilesListModel(File baseDir) { names = baseDir.list(null); } public int getSize() { return names.length; } public Object getElementAt(int index) { return names[index]; } public void addListDataListener(ListDataListener l) {} public void removeListDataListener(ListDataListener l) {} } Definiamo un modello di lista basato sul contenuto di una directory private void btn_chooseDirActionPerformed( java.awt.event.ActionEvent evt) { // Aggiornamento della directory: JFileChooser chooser = new JFileChooser( fld_dirname.getText()); chooser.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY); if (chooser.showDialog(this, "Seleziona la directory") == JFileChooser.APPROVE_OPTION) { // Cambio directory: fld_dirname.setText( chooser.getSelectedFile().toString()); lst_files.setModel( new FilesListModel(chooser.getSelectedFile())); } } © 2010 - CEFRIEL

Rassegna componenti Di seguito è riportata una lista di componenti: non esaustiva, ne esistono molti standard … … e molti di più non standard ma open; di cui non si approfondisce l’utilizzo; per i quali si consiglia di provare a costruire un programma di esempio (uno per componente). Elenco di alcune delle componenti: JLabel, JButton, JToggleButton, JCheckBox, JRadioButton, JTextField, JPasswordFiled, JFormattedTextField, JTextArea, JList, JComboBox, JTree, JTable, JScrollBar, JProgressBar, JFrame, JDialog, JMenu, JMenuBar, JMenuItem, JCheckBoxMenuItem, JRadioButtonMenuItem, JSeparator, JPopupMenu, JFileChooser, JColorChooser, JOptionPane, JPanel, JScrollPane, JTextPane, JEditorPane, JSpinner, JSlider, JSplitPane, JTabbedPane, JDesktopPane, JLayeredPane, JInternalFrame, JToolBar, … inoltre è possibile realizzare nuove componenti custom. © 2010 - CEFRIEL

Componenti di base JLabel: visualizzare un testo informativo: JLabel lblExample = new JLabel(“Testo informativo”); lblExample.setText(“Altro testo”); JButton: pulsante per invocare un’azione: JButton btnExample = new JButton(“Clicca qui); btnExample.addActionListener(…); JToggleButton: per selezionare opzioni: JToggleButton tglExample = new JToggleButton(“ChangeMe”,true); if (tglExample.isSelected()) {…} JCheckBox: come il precedente: JCheckBox chkExample = new JCheckBox(“Option”); If (chkExample.isSelected()) {…} JRadioButton: selezione singola tra scelte multiple: ButtonGroup grp = new ButtonGroup(); grp.add(new RadioButton(“opt1”)); grp.add(new RadioButton(“opt2”)); System.out.println(“Azione: ” + grp.getSelection().getActionCommand()); JTextField, JPasswordFiled, JFormattedTextField, JTextArea: campi di testo semplice (nascosto in quanto password, formattato); JTextField fldExample = new JTextField(“Change this text”); System.out.println(“Testo: ” + fldExample.getText()); JFrame, JDialog, JPanel: contenitori di altri componenti: JPanel pnl = new JPanel(); JFrame frm = new JFrame(“Titolo”); JLabel lbl = new JLabel(“Qualcosa”); frm.add(pnl); pnl.add(lbl); © 2010 - CEFRIEL

Componenti complesse JList: mostra una lista di elementi: Una possibilità semplice è data dalla creazione della lista data una collezione (o array) di elementi: String[] data = {“Primo", “Secondo"}; JList lstExample = new JList(data); System.out.println(“Selezionato: ” + lstExample.getSelectedValue()); Come altro esempio si veda la classe GeneratedExample.FilesListModel in 03_AWT&Swing\Swing\SwingExamples01 JComboBox: lista con selezione singola: Si tratta di un JTextFiled composto con una JList in cui scegliere l’elemento da mostrare nel campo di testo. JTable: tabella (lista di tuple): Componente capace di mostrare una tabella con righe e colonne; Si provi a mostrare un JTable con un TableModel creato per generare le tabelline dei numeri interi forniti come parametro al costruttore. Si veda 03_AWT&Swing\Swing\SwingExamples01, la classe TabellinaTableModel e sotto la scheda “tab2”. JTree: gerarchia di elementi: Componente di visualizzazione di una gerarchia (albero) di elementi, come ad esempio le directory ed i file in un file-system (si pensi a gestione risorse). Se adeguatamente re-implementato il modello TreeModel, si può definire un albero capace di caricare dati solo quando servono durante la navigazione. Si osservi, come esempio di caricamento al volo, le classi JDMSBrowser e DMSTreeNode in Code\02_BaseAPIs\Altre\DMS\DMS. © 2010 - CEFRIEL

Altre componenti JMenuBar, JMenu, JMenuItem, JSeparator, JCheckBoxMenuItem, JRadioButtonMenuItem: permettono di creare definire una struttura (con radice in JMenuBar) che definisce una barra dei menu. JPopupMenu: menu contestuale (con item precedenti). JToolBar: barra degli strumenti. JOptionPane, JPanel, JScrollPane, JTextPane, JEditorPane, JSplitPane, JTabbedPane, JDesktopPane, JLayeredPane, JInternalFrame: contengono e organizzano altri JComponent con differenti scopi. JFrame, JDialog, JFileChooser, JColorChooser: finestre, finestre di dialogo, finestre di dialogo preconfezionate: JFileChooser fc = new JFileChooser(); if (fc. showOpenDialog(“?”)==JFileChooser.APPROVE_OPTION) { …chooser.getSelectedFile()…; © 2010 - CEFRIEL

Chi disegna? Chi invoca gli handler? AWT/Swing thread Chi disegna? Chi invoca gli handler? un thread apposito che esegue il classico “main loop”; effettua (tra le altre) le seguenti operazioni: estrae gli eventi dalla coda (java.awt.EventQueue); invoca i listener degli eventi nell’ordine di registrazione; invoca le funzionalità di ricalcolo del layout sulle componenti invalidate (tramite metodo invalidate); produce un Graphics e lo utilizza per richiedere il disegno delle componenti di alto livello (che gerarchicamente invocano il disegno di quelle che contengono, composite pattern). Invoco una operazione e non avviene! le modifiche dell’interfaccia grafica devono avvenire nel thread di AWT, quindi in un listener o tramite: EventQueue.invokeLater( new Runnable() { public void run() { /* operazione */ } }); © 2010 - CEFRIEL