01.GUI_JAVA
01.GUI_JAVA
IN JAVA
Quando si dota un programma di una GUI, cambia completamente il ciclo di vita del
programma,
• CON GUI → la JVM mantiene sullo schermo la GUI e cattura eventuali eventi (interazioni
dell’utente) su di essa. Quindi un’applicazione che fa uso di GUI, una volta lanciata, rimane
in attesa dell’input dell’utente e termina solo in base a un determinato input.
Swing
Per correggere questi difetti la Sun ha successivamente introdotto le Swing in cui i componenti
vengono direttamente disegnati dalla JVM: Visualizzazione uniforme su
ogni piattaforma, ricchezza di componenti
Una componente è un oggetto che offre un’interazione con l’utente (pulsante, menù, campo
di testo, ecc).
Quindi, se vuoi mostrare un’informazione (come testo, pulsanti, immagini e così via) sul
FRAME, prima devi creare un PANEL ed aggiungerlo alla PARETE.
1. Il Panel AWT non offre tutte le funzionalità avanzate di Swing, come ad esempio il
rendering di testo antialiasing.
2. Il Panel in AWT utilizza un layout predefinito basato su griglie (grid layout), mentre il
contentPane in Swing utilizza un layout predefinito basato su bordi (border layout).
Questo significa che il modo in cui i componenti vengono organizzati all'interno del
contenitore predefinito è diverso.
4. Il colore di background:
• Nel caso del Panel in AWT, il colore di sfondo predefinito è generalmente determinato dal
sistema operativo in uso. Di solito, sarà di colore grigio chiaro o bianco, ma il colore esatto
dipende dalle impostazioni del sistema.
Metodi:
Metodi:
➔ void setText(String s) viene utilizzato per impostare il testo specificato sul
pulsante;
➔ String getText() viene utilizzato per restituire il testo del pulsante;
➔ void setEnabled(boolean b) viene utilizzato per abilitare o disabilitare il
pulsante;
➔ void setIcon(Icon b) viene utilizzato per impostare l'icona specificata sul
pulsante;
➔ Icon getIcon() Viene utilizzato per ottenere l'icona del pulsante.
Interfacce Grafiche Java
Caselle di testo - Classe JTextField
La classe JTextField è sottoclasse di JTextComponent e consente di creare una casella di testo
composta da una sola riga che può essere usata come input o output di stringhe.
Costruttori:
Metodi:
Costruttori:
➔ JTextArea() crea un’area di testo vuota;
➔ JTextArea(int, int) crea un’area di testo avente un numero di righe e di colonne;
➔ JTextArea(String) crea un’area di testo con uno specifico valore di testo;
➔ JTextArea(String, int, int, int) crea un’area di testo con un valore di testo, un numero
di righe e di colonne. Il quarto parametro int rappresenta una costante statica della
classe JTextArea che consente di impostare una scrollbars (SCROLLBARS_BOTH,
SCROLLBARS_VERTICAL_ONLY, SCROLLBARS_HORIZONTAL_ONLY,
SCROLLBARS_NONE)
Ogni componente atomico può essere dimensionato e posizionato in modo assoluto con il
metodo setBounds(x, y, width, height).
Per poter posizionare i widget in modo assoluto bisogna “disattivare” il gestore di layout del
contenitore. Il gestore di layout predefinito del JPanel è FlowLayout, per “disattivarlo”
bisogna settare il layout a null (setLayout(null))
La classe Java FlowLayout viene utilizzata per disporre i componenti in una riga, uno dopo
l'altro (in un flusso). È il layout predefinito del pannello.
https://docs.oracle.com/javase/7/docs/api/javax/swing/package-summary.html
JPanel p = new JPanel();
p.setLayout(null);
JButton b = new JButton(“click”);
b.setBounds(130,100,100,40);
p.add(b);
https://docs.oracle.com/javase/7/docs/api/javax/swing/package-summary.html
Layout Manager
In Java il modo con cui le componenti vengono disposte e posizionate (layout)
dipende dal contenitore. A ogni contenitore può essere associato un gestore che
si occupa della disposizione degli elementi. Questo gestore è chiamato Layout
Manager.
Tutti i contenitori hanno un Layout Manager di default, che può essere comunque
cambiato richiamando un metodo e definendo un nuovo gestore.
ESEMPIO
Un pulsante genera un evento quando si clicca su di esso, una finestra genera un evento
quando viene chiusa: tutte le componenti sono possibili oggetti di origine.
Per realizzare la gestione degli eventi si deve procedere nel seguente modo:
1. creare uno o più ascoltatori in base agli eventi che si vogliono gestire;
2. registrare l'ascoltatore in un oggetto origine che si vuole controllare;
3. gestire l'evento eseguendo il metodo associato.
Una classe che implementa un’interfaccia eredita da essa tutti i metodi astratti che devono
quindi essere definiti. E’ importante che tutti i metodi astratti dell’interfaccia siano definiti,
anche senza inserire codice tra le { …}.
import java.awt.event.*;
class GestoreFinestra implements WindowListener
{
…
}
GestroreFinestra deve prevedere tutti i metodi astratti dell’interfaccia WindowListener, anche
se non contengono istruzioni:
Esempio:
Creazione dell’ascoltatore:
viene implementato solo il
metodo che gestisce l’evento di
chiusura della finestra con la
terminazione del programma
Double → parseDouble()
JTextField t = new JTextField();
Esempio:
…
int n = Integer.parseInt(t.getText());
Potrebbe succedere che l’utente inserisca spazi prima e/o dopo il valore numerico:
int n = Integer.parseInt(t.getText().trim());
Esempio:
JTextField t = new JTextField();
…
int somma = 100;
t.setText(Integer.toString(somma));
Esempio:
try{
number =
Integer.parseInt(t.getText().trim());
}catch (NumberFormatException e) {
Next Step