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