Le basi della grafica in Java Prof. Francesco Accarino IIS Altiero Spinelli via Leopardi 132 Sesto san Giovanni Elaborazione classica o imperativa L’elaborazione è concentrata nel momento centrale, durante il quale non vi è interazione col mondo esterno. L’elaborazione avviene in un mondo chiuso ciò rende la computazione più controllabile e prevedibile ma per ciò stesso intrinsecamente meno flessibile e meno espressiva di una che avvenga in un mondo interattivo, aperto Prof. Francesco Accarino La basi della grafica in java 2 UN NUOVO SCENARIO Questo schema viene radicalmente alterato dal concetto di Graphical User Interface (GUI), attraverso cui l’utente può interagire durante l’elaborazione e determinarne quindi il flusso in modo non prevedibile a priori. Cosa significa “elaborare” in questo scenario? Si svolgono azioni non più in conseguenza del proprio flusso di controllo interno predeterminato, ma in risposta a eventi generati dall'esterno. Cambia la struttura stessa del sistema software: non più un sistema che “decide lui” quando inviare comandi ai dispositivi, ma un sistema che reagisce a stimoli di origine esterna. Prof. Francesco Accarino La basi della grafica in java 3 Interazione con l’utente Una finestra e in generale molti componenti grafici di una GUI (menù, bottoni, etc.) devono permettere l’interazione con l’utente. Ad esempio, considerando una semplice finestra (JFrame), l’utente può voler spostare, ridimensionare, ridurre ad icona o chiudere la finestra. Per richiedere tali operazioni l’utente utilizza in modo appropriato, il mouse e/o la tastiera (dispositivi di input). Per rispondere coerentemente al comportamento dell’utente, è necessario che la GUI sia in grado di: Percepire (ascoltare) l’azione compiuta dall’utente. Reagire all’azione dell’utente seguendo uno schema comportamentale precedentemente definito. Prof. Francesco Accarino La basi della grafica in java 4 Esempio: ridimensionamento finestra Analizziamo cosa avviene in seguito ad un click dell’utente sul pulsante di ridimensionamento di una finestra. Stato della finestra: assumiamo che la finestra, al momento del click, occupi tutto lo schermo (completamente espansa). 1. L’utente preme il pulsante sinistro del mouse quando il mouse si trova sopra il pulsante di ridimensionamento della finestra. 2. Il sistema di rilevamento delle azioni dell’utente, ascoltatore o listener, rileva il tipo di azione dell’utente e: 3. Invia un messaggio all’oggetto JFrame per notificargli di aggiornare il proprio stato. 4. Richiede al sistema AWT (Abstract Window Toolkit) di ridipingere la finestra. 5. Il sistema AWT invoca il metodo paint() sull’oggetto JFrame il cui stato corrente è: finestra ridimensionata. Prof. Francesco Accarino La basi della grafica in java 5 Esempio: ridimensionamento finestra Prof. Francesco Accarino La basi della grafica in java 6 La libreria Swing Con Swing si indica l’insieme degli strumenti con cui Java 2 consente di: Realizzare interfacce grafiche User-Friendly, composte da bottoni, menu, liste di elementi, spazi per disegnare oggetti e immagini. Swing fa parte delle JFC – Java Foundation Classes che sono state introdotte in Java 2 Le classi di Swing sono contenute nel pacchetto javax.swing Prof. Francesco Accarino La basi della grafica in java 7 Le GUI Le interfacce grafiche saranno chiamate nel seguito GUI (GraphicaUna GUI consente all’utente di interagire con il programma premendo bottoni, selezionando oggetti, spostando il cursore… Ogni azione dell’utente compiuta attraverso l’interfaccia grafica genera un evento, che il programma deve gestire: se l’utente preme quel bottone esegui questo metodo... l User Interface) Prof. Francesco Accarino La basi della grafica in java 8 I package AWT e Swing Java 1.0 Il package per realizzare GUI era AWT (Abstract Window Toolkit) Le funzionalità delle classi AWT furono definite "equally mediocre on all systems", il progetto non era ben strutturato. Java 1.1 Un nuovo modello di gestione degli eventi, più semplice e logico, migliora la struttura di AWT Java 2 (Java 1.2) Il nuovo pacchetto JFC/Swing si sovrappone ad AWT introducendo alcuni nuovi componenti grafici e migliorando l’aspetto esteriore di altri. Le classi di Swing cominciano con J, per distinguerle dalle analoghe classi di AWT (Button <-> JButton) Prof. Francesco Accarino La basi della grafica in java 9 Categorie di classi per le GUI Components queste classi rappresentano i componenti grafici delle GUI quali JButton, JMenu, JLabel, ... Containers queste classi servono a contenere componenti e controllano la disposizione degli elementi all'interno tramite Layout Managers. Un container può essere a sua volta componente di un altro. Graphics classi di AWT (non ridefinite in Swing) che definiscono colori, font, immagini, poligoni, … Prof. Francesco Accarino La basi della grafica in java 10 Prof. Francesco Accarino La basi della grafica in java 11 Componenti: Guida Oracle JTextArea JButton JComboBox JMenu JTextField JRadioButton JList JCheckbox JPasswordField Prof. Francesco Accarino La basi della grafica in java 12 I Contenitori Japplet, Jframe, Jdialog, Jwindow sono conteiner top-level che possono essere visualizzati senza essere contenuti in altri Tutti hanno un “pannello dei contenuti” (JRootPane) nel quale vanno aggiunti i componenti, tramite il metodo add() ereditato dalla classe conteiner. Per accedere al pannello dei contenuti si usa il metodo getContentPane() Prof. Francesco Accarino La basi della grafica in java 13 Esempio JWindow Prof. Francesco Accarino La basi della grafica in java 14 Esempio JFrame Prof. Francesco Accarino La basi della grafica in java 15 Prof. Francesco Accarino La basi della grafica in java 16 Visualizzare una semplice finestra Esempio: supponiamo di dover creare e visualizzare una finestra grafica (JFrame) avente per titolo la scritta “A Simple Window.” Analizziamo il codice della classe “SimpleWindow” che svolge tale compito implementando soltanto il metodo main() e utilizzando un oggetto JFrame. Titolo della Finestra Prof. Francesco Accarino La basi della grafica in java 17 La classe SimpleWindow import java.awt.*; import javax.swing.*; public class SimpleWindow { public static void main(String[ ] args) { JFrame frame = new JFrame("A Simple Window."); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setPreferredSize(new Dimension(600, 400)); frame.pack(); frame.setVisible(true); } // end method main() } // end class Prof. Francesco Accarino La basi della grafica in java 18 Costruire Costruire un oggetto JFrame Sotto sono riportati i prototipi di due costruttori molto usati della classe JFrame. In entrambi i casi la finestra creata risulta inizialmente invisibile. /*Creazione di un oggetto JFrame specificando il titolo della finestra. N.B.: la finestra è invisibile.*/ JFrame frame = new JFrame("A Simple Window."); COSTRUTTORI JFrame(String title) Costruisce una nuova finestra, inizialmente invisibile, con il titolo specificato. JFrame() Costruisce una nuova finestra che è inizialmente invisibile. Prof. Francesco Accarino La basi della grafica in java 19 Operazioni alla chiusura della finestra Un oggetto JFrame permette di impostare il tipo di azione che deve essere svolta a seguito della chiusura della finestra. Il default corrente rende la finestra nascosta (non viene visualizzata, ma esiste). Il metodo (pubblico) setDefaultCloseOperation() consente di modificare il tipo di operazione di default da svolgere. public void setDefaultCloseOperation(int operation) Tale metodo riceve in ingresso un numero intero, tipicamente una costante intera (statica) della classe JFrame (o dell’interfaccia javax.swing.WindowConstants), che esprime il tipo di operazione. /*Imposta come azione di default, da svolgere a seguito della chiusura della finestra, l’uscita dall’applicazione grafica.*/ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Prof. Francesco Accarino La basi della grafica in java 20 Codice standard per creare una Finestra Prof. Francesco Accarino La basi della grafica in java 21