Interfacce grafiche. Una GUI (Graphic User Interface) contiene vari componenti: bottoni, etichette, immagini...



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

Programmazione Java: Interfacce grafiche (GUI)

L interfaccia grafica in Java

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

Alessandro De Luca. Lezione, 13 maggio 2015

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

L interfaccia grafica con Java

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

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

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Corso Eclipse. Prerequisiti. 3 Window Builder

Introduzione al package grafico Swing

Il calcolatore - Applicazioni

Java Applet. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

Gestione degli eventi in Java

Grafico della parabola

Corso sul linguaggio Java

Android. Implementare una interfaccia utente

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Sviluppo di Interfacce Grafiche in Java

lo PERSONALIZZARE LA FINESTRA DI WORD 2000

Interazioni col mondo: eventi

per immagini guida avanzata Uso delle tabelle e dei grafici Pivot Geometra Luigi Amato Guida Avanzata per immagini excel

INTERFACCE GRAFICHE IN JAVA CON SWING DISPENSE

BorderLayout. 1 Gestori di Layout (guida visuale)

APPLICAZIONI & APPLET

maggio 2004 Stefano Sanna - gerda@crs4.it

Cosa è un foglio elettronico

Il controllo della visualizzazione

Guida all uso di Java Diagrammi ER

STAMPA UNIONE DI WORD

Programmazione Orientata agli Oggetti in Linguaggio Java

Java: Compilatore e Interprete

TECNOLOGIE APPLICAZIONI WEB Linguaggio Java: Le Applet

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Gestione Rapporti (Calcolo Aree)

Uso delle tabelle e dei grafici Pivot

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate

CdL in Medicina Veterinaria - STPA AA

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Il calendario di Windows Vista

Biblioteca di Cervia NOZIONI BASE DI INFORMATICA

Tutorial SWING-AWT: Il Layout Manager GridBagLayout Di Michele de Nittis

Alcuni Design Pattern in Java

23 - Graphical User Interface GUI (Cenni)

Programmazione a Oggetti Lezione 10. Ereditarieta

Settaggio impostazioni tema. Cliccando nuovamente su aspetto e poi su personalizza si avrà modo di configurare la struttura dinamica della template.

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

Applets. Java. Restrizioni delle applets. Restrizioni delle applets

Modulo 3 - Elaborazione Testi 3.6 Preparazione stampa

PIATTAFORMA DOCUMENTALE CRG

HTML HTML. HyperText Markup Language. Struttura di un documento. Gli elementi essenziali di un documento HTML sono i seguenti TAG: <HTML>...

Programmazione in Java e gestione della grafica. Lezione 19

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Java: la libreria delle classi

Cos è ACCESS? E un programma di gestione di database (DBMS) Access offre: un ambiente user frendly da usare (ambiente grafico)

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

Main System Monitor Keyboard

PULSANTI E PAGINE Sommario PULSANTI E PAGINE...1

Alla scoperta della nuova interfaccia di Office 2010

NVU Manuale d uso. Cimini Simonelli Testa

Modulo 3 - Elaborazione Testi 3.5 Stampa unione

Mon Ami 3000 Varianti articolo Gestione di varianti articoli

1. Le macro in Access 2000/2003

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

Per effettuare la stampa di una cartella di lavoro si accede al comando. Stampa dal menu File o si utilizza il pulsante omonimo sulla barra

Come costruire una presentazione. PowerPoint 1. ! PowerPoint permette la realizzazione di presentazioni video ipertestuali, animate e multimediali

Tecnologie di Sviluppo per il Web

Guida all'uso Di mylittleadmin

5.3 TABELLE RECORD Inserire, eliminare record in una tabella Aggiungere record Eliminare record

Identificare le diverse parti di una finestra: barra del titolo, barra dei menu, barra degli strumenti, barra di stato, barra di scorrimento.

Client - Server. Client Web: il BROWSER

CREARE UN MODULO CON EXCEL

A destra è delimitata dalla barra di scorrimento verticale, mentre in basso troviamo una riga complessa.

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

Indice generale. Il BACK-END...3 COME CONFIGURARE JOOMLA...4 Sito...4 Locale...5 Contenuti...5

3.6 Preparazione stampa

Word è un elaboratore di testi in grado di combinare il testo con immagini, fogli di lavoro e

GESTIONE DEI PROCESSI

Progettazione : Design Pattern Creazionali

Database Manager Guida utente DMAN-IT-01/09/10

7.4 Estrazione di materiale dal web

COME CREARE UN SONDAGGIO CON SCELTA SU MOODLE

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

Microsoft Access Maschere

Flow!Works Manuale d uso

Gestione di eventi ed interfacce utente grafiche

3 Contacts (rubrica telefonica)

FotoAeree. La Sardegna vista dall alto MANUALE PER L USO DELL APPLICAZIONE

Pubblicazione e modifica di articoli per il Portale della Protezione Civile

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Esame di Informatica CHE COS È UN FOGLIO ELETTRONICO CHE COS È UN FOGLIO ELETTRONICO CHE COS È UN FOGLIO ELETTRONICO. Facoltà di Scienze Motorie

Lavorare con PowerPoint

Il linguaggio HTML - Parte 3

Finalità della soluzione Schema generale e modalità d integrazione Gestione centralizzata in TeamPortal... 6

Esercitazione n 4. Obiettivi

Transcript:

Interfacce grafiche Una GUI (Graphic User Interface) contiene vari componenti: bottoni, etichette, immagini... Alcuni componenti ne contengono altri (ad esempio le finestre), e sono detti contenitori. Inoltre: gestori di eventi (regolano le interazioni con l utente) e di layout (regolano le posizioni). Le interfacce grafiche sono gestite dai package delle JFC (Java Foundation Classes), in specie AWT (java.awt) e Swing (javax.swing).

Interfacce grafiche AWT (Abstract Windowing Toolkit): un insieme di classi (cuore delle JFC) che fornisce gli strumenti per le GUI di applet e applicazioni Swing estende AWT (senza rimpiazzarlo) In particolare serve a rendere l aspetto grafico uniforme in modo indipendente dalla piattaforma Oltre ad AWT e Swing, le JFC comprendono: Java 2D e Java 3D Drag and Drop Accessibility (per utenti con difficoltà)

AWT AWT supporta il paradigma WYSIWYG (What You See Is What You Get) Contiene tante classi, in particolare: La classe astratta Component è la base di AWT. La classe astratta MenuComponent serve a gestire i menu (in modo diverso dagli altri componenti) L interfaccia LayoutManager gestisce il layout.

AWT Tutte le classi di AWT sono di tipo: Grafica: disegnare figure, visualizzare immagini, selezionare carattere, impostare i colori,.. Componenti: pulsanti, campi testo, menù, barre... Layout Manager: disposizione sullo schermo di componenti dentro a contenitori Event Manager: che fare se si preme un pulsante, si muove il mouse,... (vedi java.awt.event) Trattamento immagini: gestione di formati (vedi: java.awt.image)

Gerarchia dei componenti AWT Object <<abstract>> Component Button Checkbox Canvas Choice <<abstract>> Container List Scrollbar Label TextComponent Panel ScrollPane Window TextArea TextField Frame Dialog FileDialog

Gerarchia dei componenti AWT Object MenuBar <<abstract>> MenuComponent PopupMenu CheckboxMenuItem MenuItem Menu I menu hanno una gerarchia separata rispetto agli altri componenti perché hanno delle restrizioni (ad esempio meno libertà nei colori)

Swing Swing contiene componenti grafici alcuni dei quali sono simili a quelli di AWT (ad esempio le etichette), altri sono più complessi come alberi, tabelle, documenti di testo formattato Quasi tutti i componenti di Swing derivano da un genitore comune: JComponent, che estende la classe Container di AWT Tipicamente per ogni componente di AWT esiste un corrispondente componente di Swing con prefisso J (non vale il viceversa)

Gerarchia di Swing Object <<abstract>> Component swing <<abstract>> JComponent Button Checkbox Canvas Choice <<abstract>> Container List Scrollbar Label TextComponent Panel ScrollPane Window TextArea TextField Frame Dialog FileDialog

Gerarchia di Swing <<abstract>> JComponent JPasswordField JFormattedTextField JTextField JTextArea JTextPane JEditorPane

Swing Swing è quasi interamente indipendente dalla piattaforma (a differenza di AWT). Qual è il segreto? È scritto in Java! Non dipende quindi da componenti legati al sistema operativo sottostante (peer components) Eccezioni: JApplet, JDialog, JFrame, JWindow (sono sottoclassi dirette di classi di AWT legate alla piattaforma)

Swing In Swing tipicamente una GUI ha 3 livelli: Un contenitore principale, che può essere un frame (JFrame), una finestra di dialogo (JDialog), un applet (JApplet). Un pannello (JPanel), contenuto nel corpo del contenitore (insieme a una toolbar, JToolbar). Può contenere componenti atomici o altri pannelli. I componenti atomici contenuti nel pannello: etichette (JLabel), bottoni (JButton), campi di testo (JTextField)...

Frame Per creare un frame, usiamo JFrame JFrame fr = new JFrame( FrameDemo ); fr.setsize(300,100); fr.setvisible(true); Potevamo anche estendere la classe JFrame import javax.swing.jframe public class MioFrame extends JFrame { public MioFrame() un costruttore { super(); senza parametri } } un costruttore che usa una String this.settitle( FrameDemo ); this.setsize(300,100); this.setvisible(true);

Frame Varianti / raffinamenti: import javax.swing.jframe public class MioFrame extends JFrame { public MioFrame() { super(); } this.settitle( FrameDemo ); this.pack(); lascia dimensionare al layout manager secondo ciò che è meglio setdefaultcloseoperation(jframe.exit_on_close); this.getcontentpane().add (emptylabel, BorderLayout.CENTER); this.setvisible(true); } aggiunge oggetti al pannello decide il da farsi in caso (un etichetta vuota) che il frame venga chiuso public static void main(string[] args) { new MioFrame(); il main esegue solo la creazione di un istanza } (crea una GUI in quanto estende JFrame)

Cosa contiene un JFrame JFrame 1 1 JRootPane 1 1 LayeredPane (un JLayeredPane) 1 1 ContentPane (un JPanel) I componenti non vanno piazzati su JFrame ma sui suoi figli. 1 GlassPane (un JPanel) 1 MenuBar (JMenuBar, default: null) Un pannello di vetro sovrapposto, invisibile di default, utile per visualizzare il cursore e intercettare eventi del mouse in qualunque punto del frame Per avere un menù va creato JMenuBar menu = new JMenuBar(); setjmenubar(menu); Qui va il contenuto vero e proprio Entrambi sono a livello FRAME_CONTENT_LAYER (= -30000)

Altri contenitori La JRootPane è più che altro un elemento tecnico della gerarchia. Ha un suo layout di tipo RootLayout che imposta come stanno glasspane, contentpane, menubar (non serve a molto altro) Poi implementa l interfaccia RootPaneContainer che dichiara metodi per la gestione di componenti interni e di pannelli interni: può essere utile implementare la stessa interfaccia in altri contenitori definiti dall utente con struttura simile

Applet Le applet sono programmi Java che vengono eseguiti all interno di un browser per il web. Estendono la classe JApplet ridefinendo alcuni metodi che regolano il comportamento. Tra di essi non c è un metodo main! Ciò che la applet esegue, dipende dal browser.

Applet I metodi da riscrivere sono: init(): invocato una sola volta quando la applet viene caricata (inizializza i dati) start(): invocato quando si carica la applet o si fa refresh della pagina (dà il via ai thread) stop(): quando si chiude il browser o si nasconde la finestra (blocca i thread per risparmiare risorse) destroy(): quando si chiude il browser (libera le risorse di sistema allocate, opposto a init) paint(): disegna (o ridisegna) quello che deve apparire nella finestra dell applet, viene invocato ogni volta che lo stato dell applet viene aggiornato

Applet Nel codice HTML si usa <applet> </applet> per inserirne una e <param /> per i parametri nel sorgente HTML <applet code= H.class width= 300 height= 100 > <param name= messaggio value= Ciao!! /> <param name= colore value= Red /> <param name= numero value= 4 /> </applet> nel metodo init() String messaggio = getparameter( messaggio ); int numero = getparameter( numero );

Componenti I componenti sono sottoclassi di JComponent ognuno coi suoi metodi per cose specifiche. Tutti hanno (eredità di JComponent): setborder(border b) settooltiptext(string istruzioni) I bottoni push (JButton) hanno: costruttori con una String oppure un Icon gettext(), settext() setenabled()

Componenti I bottoni check (JCheckButton) e i bottoni radio (JRadioButton) danno un valore on/off. I check ammettono scelte multiple, i radio una sola. Le etichette (JLabel) sono aree che visualizzano stringhe o icone: costruttori con una String oppure un Icon gettext(), settext() Aree/campi di testo (JTextArea/JTextField) contengono testo (nei campi può editare) costruttori con String o int (n. caratteri) gettext(), settext() getselectedtext(),seteditable()

Componenti I componenti non vengono inseriti direttamente nel frame, ma in un pannello usato come contenitore intermedio. Il contenitore intermedio immediatamente dentro il frame è il content pane, che è reperibile invocando getcontentpane(). È l unico figlio predefinito del frame I componenti di JComponent ereditano da Container, possono a loro volta contenere o essere contenuti da altri componenti.

Componenti Quindi per inserire dei componenti dentro un pannello e a sua volta inserire quest ultimo dentro una cornice, scriveremo ad esempio: JFrame mioframe = new JFrame(); JButton abutton = new JButton(); JLabel alabel = new JLabel(); JPanel pannello = new JPanel(); pannello.add(abutton); pannello.add(alabel); mioframe.getcontentpane().add(pannello);

Esercizio Provare a creare la seguente GUI Estendere la classe JFrame e mettere tutto nel costruttore. Conviene usare un metodo apposito per inizializzare bottone ed etichetta, anche questo da mettere nel costruttore.

Esercizio import javax.swing.*; public class App extends JFrame { private JButton bottone; private JLabel etichetta; public App() { super(); this.setdefaultcloseoperation (JFrame.EXIT_ON_CLOSE); this.settitle("cornice"); this.inizializzagui(); this.pack(); this.setvisible(true); }

Esercizio private void inizializzagui() { JPanel intermedio = new JPanel(); bottone = new JButton("Bottone 1"); etichetta = new JLabel("Etichetta 2"); intermedio.add(bottone); intermedio.add(etichetta); this.getcontentpane().add(intermedio); } } public static void main(string[] args) { new App(); }

Esercizio Creare la seguente GUI Come si fa ad allineare i componenti? Quando si fa add() si specifica solo di aggiungere il componente, ma non dove!

Gestori di layout I gestori di layout sono oggetti che dicono come disporre i contenitori nel pannello. Essendo oggetti, vanno creati a partire dalla loro classe e inseriti nel contenitore. Ad es.: JPanel intermedio = new JPanel(); intermedio.setlayout(new GridLayout(3,4)); definisce (e impone di usare) un layout manager che usa una griglia. Attenzione: si trovano in java.awt!

Gestori di layout Se non specificato, il default è FlowLayout (mette componenti da sinistra a destra finché può, poi passa alla riga sotto). Altri possibili: GridLayout, mette in una griglia n m GridBagLayout, come la griglia, ma consente ai componenti di occupare più righe / colonne BoxLayout, mette tutto in orizzontale o verticale BorderLayout, usa 5 zone (nord, sud, ovest, est, centro) e va detto dove va ogni componente... (si possono anche innestare)

Gestori di layout Esempio: realizzare questa interfaccia private void inizializzagui() { JPanel intermedio = new JPanel(); intermedio.setlayout(new GridLayout(2,3)); JButton[] b = new JButton[6]; b[0]= new JButton("Usa"); b[1]= new JButton("Salta"); b[2]= new JButton("Spara"); b[3]= new JButton( Sinistra"); b[4]= new JButton("Abbassati"); b[5]= new JButton( Destra"); for (int i = 0; i<bottone.length; i++) { intermedio.add(bottone[i]); } this.getcontentpane().add(intermedio); }

Gestori di layout Esercizio: realizzare una interfaccia per calcolatrice (classico esercizio Java) Si possono abbellire i vari elementi usando diversi font e colori (java.awt definisce le classi Font e Color) notazione RGB o diversi colori predefiniti

Look and Feel Swing consente di modificare il look and feel (L&F), cioè come appaiono i componenti (look) e cosa fanno (feel). L architettura di Swing lo consente perché ogni componente è descritto da due classi: il JComponent e una ComponentUI. Ad es., oltre al JButton (estende JComponent) c è un ButtonUI (estende ComponentUI). La sottoclasse ComponentUI si chiama delegato UI, o delegato L&F o anche solo UI.

Look and Feel In aggiunta, la classe UIManager (sottoclasse diretta di Object del package javax.swing) si occupa di gestire il settaggio del L&F. Possiede metodi statici get e set per farlo. Esempio di uso: ricava (e setta) try il L&F di sistema { UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() ); } catch (ClassNotFoundException e) {... } catch (InstantiationException e) {... } catch (IllegalAccessException e) {... } catch (UnsupportedLookAndFeelException e) {... }

Look and Feel setlookandfeel deve annunciare con throws tutte le seguenti eccezioni controllate: ClassNotFoundException : non c è il L&F InstantiationException : il L&F chiede di creare un istanza di classi astratte (o simile) IllegalAccessException : il L&F chiede di usare qualcosa di non accessibile (privato) UnsupportedLookAndFeelException : il valore di issupportedlookandfeel() del L&F è false

Look and Feel Variamo il look and feel usandone uno chiamato Motif import javax.swing.jframe public class MioFrame extends JFrame { public MioFrame() {... } public static void main(string[] args) provare anche con altri { String lnf = com.sun.java.swing.plaf.motif.motiflookandfeel ; try meglio settare subito il L&F { UIManager.setLookAndFeel(lnF); } o la JVM metterà un default catch (ClassNotFoundException e) { System.err.println(lnF+ non trovato! Sicuro che esiste? Userò il default.. );} catch (UnsupportedLookAndFeelException e) { System.err. println(lnf+ non funziona! Userò il default.. );} catch (Exception e) {System.err.println( Altri problemi con: +lnf+, userò il default.. ); e.printstacktrace();} new MioFrame(); } } queste eccezioni non sono gestite granché bene ma non è un problema: è sensato usare il default