Java GUI
Swing Java
1
Introduzione
n Componenti
grafici di Java (Swing)
¨ Utilizzo
di alcuni dei metodi per creare semplici
finestre grafiche
¨ Accesso ai JavaDoc per usare meglio gli oggetti
già pronti
n Richiami
¨ Variabili
locali, di istanza e parametri
¨ Costruttori
¨ Overloading dei metodi e dei costruttori
¨ metodo main
2
Java Swing
JTextField
JLabel
JCheckBox
JButton
JFram
e
JComboBox
ContentPane
3
I Lego
n JFrame
à getContentPane()
¨ Al
Content Pane è un Panel a cui si possono
aggiungere (con il metodo add)
n JPanel
n JButton,
JTextField, JCheckBox, JLabel, JCombox
n …altri componenti Swing
n JPanel
¨ Metodo
add per aggiungere componenti
n JPanel
n JButton,
JTextField, JCheckBox, JLabel, JCombo
n …altri componenti Swing
4
JFrame - javax.swing.JFrame
n JFrame:
una finestra dotata di cornice, barra
del titolo con pulsanti tipici e un pannello
(content pane)
Content Pane
È il pannello contenuto
nel JFrame
5
JFrame
n Come
si aggiungono gli elementi e si imposta
il colore?
¨ Si
applicano al Content Pane!
n Content
Pane
¨ È
un Container, in sostanza è un pannello
semplice (contiene componenti)
¨ In genere si crea un proprio JPanel (o
JContainer) e lo si imposta come Content Pane
¨ I metodi che si possono applicare sono quali tutti
quelli del JPanel
6
JFrame
Costruttori
n public JFrame()
¨ Crea
n
un nuovo Frame inizialmente invisibile
public JFrame(String title)
¨ Crea
un nuovo frame, inizialmente invisibile, con un testo
specificato.
Metodi
n public void setVisible(boolean b)
¨ Mostra
o nasconde un Frame in base al valore del
parametro b
7
JFrame - metodi
n
public Container getContentPane()
¨ Ritorna
n
n
il contentPane per il Frame.
public void setContentPane(Container contentPane)
¨ Imposta il contentPane del Frame.
public void setDefaultCloseOperation(int operation)
¨ Imposta l’operazione che viene eseguita quando si chiude
la finestra.
¨ JFrame.DO_NOTHING_ON_CLOSE
¨ JFrame.HIDE_ON_CLOSE
¨ JFrame.DISPOSE_ON_CLOSE
¨ JFrame.EXIT_ON_CLOSE.
8
JFrame - metodi
n public
void setSize(int width, int height)
¨ Imposta
n public
la dimensione della finestra
void setLocation(int x, int y)
¨ Sposta
la finestra nella posizione x,y specificata
(relativa all’angolo in alto a sinistra della finestra)
9
Color - java.awt.Color
Costruttori
n public Color(int r, int g, int b)
¨ Crea
n
un colore RGB opaco nel range (0 - 255).
public Color(int r, int g, int b, int a)
¨ Crea
un colore RGB nel range (0 - 255) con l’aggiunta
della trasparenza (canale Alpha).
n
Alcuni colori già pronti, come campi statici di Color
¨ Color.BLACK
,Color.BLUE ,Color.CYAN ,
Color.DARK_GRAY, Color. GRAY,
Color.GREEN, Color.LIGHT_GRAY, Color.MAGENTA ,
Color.ORANGE, Color.PINK, Color.RED, Color.WHITE,
Color.YELLOW
10
JPanel - javax.swing.JPanel
n La
classe JPanel implementa un contenitore
senza cornice che si usa per contenere altri
componenti
11
JPanel
Costruttore
n public JPanel()
¨ Crea
un panel vuoto con flow layout.
Metodi
n public void setBackground(Color bg)
¨ Imposta
il colore di sfondo. Il colore è usato solo se il
componente è opaco.
n
public void setOpaque(boolean b)
¨ Se
true lo sfondo del componente (background) viene
disegnato
12
JPanel - metodi
n
public Component add(Component comp)
¨
n
public void add(Component comp, Object constraints)
¨
n
Aggiunge un componente (Component di Swing) al pannello e viene
posizionato in base al Layout Manager
Come il metodo precedente, ma permette di specificare alcuni vincoli
di alcuni LayoutManager - overloading
public void setPreferredSize(Dimension preferredSize)
¨ Imposta la dimensione preferita di un componente
à Ad un pannello posso aggiungere anche altri Pannelli
n
Serve per organizzare meglio lo spazio
à Il metodo setSize(…) non funziona in quanto la size è
gestita dal LayoutManager (vedremo in seguito)
13
Esempio
public static void main(String[] s){
JFrame f=new JFrame();//nuova finestra
JPanel p=new JPanel();//nuovo pannello
f.setContentPane(p);//imposta il content pane
p.setBackGround(Color.GREEN);/*colore dello
sfondo (content pane)*/
f.setSize(500,500);/*imposta la dimensione
della finestra */
f.setVisible(true);/*visualizza la
finestra*/
}
14
JLabel - javax.swing.JLabel
Bottoni: la classe JLabel implementa un
etichetta con sfondo non opaco
Costruttori
n JLabel()
¨ Crea
una label vuota.
n JLabel(String
¨ Crea
text)
una lavel con il testo specificato
15
JLabel – metodi comuni
n
public void setPreferredSize(Dimension preferredSize)
¨ Imposta
n
la dimensione preferita di un
componente
public void setForeground(Color fg)
¨ Imposta
n
il colore del testo.
public void setBackground(Color bg)
¨ Imposta
il colore di sfondo. Il colore è usato solo se il
componente è opaco.
n
public void setText(String text)
¨ Imposta
n
il testo visualizzato
public void setOpaque(boolean isOpaque)
¨ Se
true lo sfondo del componente (background) viene
disegnato
16
JButton - javax.swing.JButton
Bottoni: la classe JButton implementa un
pulsante
Costruttori
n public JButton()
¨ Crea
n public
¨ Crea
un pulsante senza testo
JButton(String text)
un pulsante con il testo specificato
17
JButton – metodi comuni
n
public void setPreferredSize(Dimension preferredSize)
¨ Imposta
n
la dimensione preferita di un
componente
public void setForeground(Color fg)
¨ Imposta
n
il colore del testo.
public void setBackground(Color bg)
¨ Imposta
il colore di sfondo. Il colore è usato solo se il
componente è opaco.
n
public void setText(String text)
¨ Imposta
n
il testo visualizzato
public void setOpaque(boolean isOpaque)
¨ Se
true lo sfondo del componente (background) viene
disegnato
18
Esempio
public static void main(String[] s){
/*nuova finestra*/
JFrame f=new JFrame();
/*nuovo pannello */
JPanel p=new JPanel();
/*imposta il content pane*/
f.setContentPane(p);
/*crea un pulsante*/
JButton b=new JButton(“pulsante di prova”);
/*aggiunge il pulsante al pannello */
p.add(b);
/*imposta la dimensione della finestra */
f.setSize(500,500);
/*visualizza la finestra*/
f.setVisible(true);
}
19
JTextField - javax.swing.JTextField
n Casella
di Testo: la classe JTextField
implementa un’area in cui è possibile inserire
del testo
Costruttori
n public JTextField()
¨ Costruisce
n public
una Test Field vuota
JTextField(String text)
¨ Costruisce
una Test Field con il testo specificato
20
JTextField – metodi comuni
n
public void setPreferredSize(Dimension preferredSize)
¨ Imposta
n
la dimensione preferita di un
componente
public void setForeground(Color fg)
¨ Imposta
n
il colore del testo.
public void setBackground(Color bg)
¨ Imposta
il colore di sfondo. Il colore è usato solo se il
componente è opaco.
n
public void setText(String text)
¨ Imposta
n
il testo visualizzato
public void setOpaque(boolean isOpaque)
¨ Se
true lo sfondo del componente (background) viene
disegnato
21
JComboBox - javax.swing.JComboBox
n Casella selezione
Costruttori
n JComboBox(Object[] items)
¨ Crea
una JComboBox che contiene gli elementi
specificati nell’array.
22
JComboBox – metodi comuni
n
public void setPreferredSize(Dimension preferredSize)
¨ Imposta
n
la dimensione preferita di un
componente
public void setForeground(Color fg)
¨ Imposta
n
il colore del testo.
public void setBackground(Color bg)
¨ Imposta
il colore di sfondo. Il colore è usato solo se il
componente è opaco.
n
public void setOpaque(boolean isOpaque)
¨ Se
true lo sfondo del componente (background) viene
disegnato
23
JComboBox
Metodi
n public int getSelectedIndex()
¨ Ritorna
l’indice dell’elemento selezionato o -1 se non è
selezionato nulla
n
public void setSelectedIndex(int anIndex)
¨ Imposta
n
public Object getSelectedItem()
¨ Ritorna
n
l’indice selezionato
l’elemento selezionato
public void setSelectedItem(Object anObject)
¨ Imposta
l’elemento specificato come selezionato
24
JCheckBox - javax.swing.JComboBox
n Casella selezione
Costruttori
n public JCheckBox()
¨ Crea
n public
un check box non selezionato
JCheckBox(String text)
¨ Crea
un check box non selezionato con il testo
specificato
25
JCheckBox – metodi comuni
n
public void setPreferredSize(Dimension preferredSize)
¨ Imposta
n
la dimensione preferita di un
componente
public void setForeground(Color fg)
¨ Imposta
n
il colore del testo.
public void setBackground(Color bg)
¨ Imposta
il colore di sfondo. Il colore è usato solo se il
componente è opaco.
n
public void setOpaque(boolean isOpaque)
¨ Se
true lo sfondo del componente (background) viene
disegnato
26
JCheckBox
Metodi
n public boolean isSelected()
¨ Indica
n public
se selezionato
void setSelected(boolean b)
¨ Imposta
il check su selezionato
27
LayoutManager
n Permette
di definire il modo in cui i
componenti vengono disposti all’interno di un
pannello
¨ FlowLayout
¨ GridLayout
¨ BorderLayout
28
FlowLayout
n
n
Dispone i componenti uno di seguito all’altro
(eventualmente andando alla riga successiva)
FlowLayout()
¨ Costruisce
n
un manager con allineamento al centro
FlowLayout(int align)
¨ Costruisce
un manager con allineamento specificato dal
parametro
n
FlowLayout(int align, int hgap, int vgap)
¨ Costruisce
un manager con allineamento specificato dal
parametro e spaziatura orizzontale e verticale specificata
29
GridBag
n
n
Dispone i componenti a scacchiera (Matrice)
public GridLayout()
¨ Crea
n
public GridLayout(int rows, int cols)
¨ Crea
n
una griglia su singola colonna
una griglia con numero di righe e colonne specificate
public GridLayout(int rows, int cols, int hgap,
int vgap)
¨ Crea
una griglia con numero di righe e colonne
specificate, con una spaziatura (tra le celle) orizzontale e
verticale specificata
30
BorderLayout
n Dispone
i componenti in 5 aree (Nord, Sud,
Est, Ovest e Centro)
n public BorderLayout()
¨ Costruisce
n public
un border layout spaziatura
BorderLayout(int hgap, int vgap)
¨ Costruisce
un border layout spaziatura
orizzontale e verticale specificata
31
BorderLayout
n Per
aggiungere elementi occorre specificare
in quale area collocarli
n Supponendo che xxx sia una variabile
associata ad un Component (es JButton etc)
¨ p.add(xxx,BorderLayout.EAST);
¨ p.add(xxx,BorderLayout.WEST);
¨ p.add(xxx),BorderLayout.NORTH);
¨ p.add(xxx,BorderLayout.SOUTH);
¨ p.add(xxx,BorderLayout.CENTER);
32
Grafica ed eventi
Più movimento alle classi
33
JComponent e Repaint
n
Come chiedere il ridisegno di un componente?
¨ Ogni
componente Swing ha il metodo repaint():
l’invocazione di questo metodo schedula il ridisegno del
componente “quanto prima”
¨ ESEMPIO:
JPanel p=new JPanel();
p.add(…)
…
p.repaint();
n
Il repaint comporta la chiamata a metodo
paintComponent(Graphics g)
¨ Utile
nei quando si usano componenti per le animazioni
34
JFrame
n
Come strutturare le classi che utilizzano le swing?
¨ quando
si ha bisogno di un JFrame, creare una classe
che estende JFrame e impostare nel costruttore tutte le
istruzioni di inizializzazione
¨ Tutti i JComponent che devono essere accessibili
vengono definiti come campi e inizializzati nel costruttore
Esempio
public class Myframe extends JFrame{
private JButton b;
public Myframe(){
b=new JButton(“pulsante”);
…
}
public void mioMetodo(){
b.setForeground(Color.RED);
}
}
35
Listener
n Vengono
invocati a seguito di un determinato
evento
n Alcuni listener di interesse:
¨ ActionListener
¨ MouseListener
¨ MouseMotionListener
¨ MouseWheelListener
n I
metodi dei listener vengono invocati in
maniera automatica dal gestore di eventi
Java
36
Listener e accesso alla classe
n
Permettere al listener di accedere a campi e metodi della
classe generale (in genere si estende JFrame ma per le
animazioni a volte si usa JComponent)
¨
Definire i listener come classi interne della classe
ESEMPIO:
public class Myframe extends JFrame{
private JButton b;
public Myframe(){
b=new JButton(“pulsante”);
b.addActionListener(new MioListener());
}
private class MioListener implements ActionListener{
public void actionPerformed(ActionEvent e){
b.setBackground(Color.GREEN);
}
}
}
37
Listener e Adapter
n Adapter
¨ Di
ogni tipo di listener esiste un Adapter
¨ Per ogni *Listener esiste *Adapter ad eccezione
di quelli con zero o uno metodi.
n ESEMPIO:
¨ MouseAdapter
n MouseMotionListener
à MouseMotionAdapter
n MouseWheelListener àMouseWheelAdapter
38
Registrazione dei Listener
n Come
registrare un listener
*Listener: ActionListener,MouseListener,
MouseMotionListener …
n Per
aggiungere un *Listener ad un oggetto c
¨ c.add*Listener(listener);
n Esempio:
JButton b=new JButton(“mio pulsante”);
ActionListener l=new …
b.addActionListener(l);
b.addMouseMotionListener(…)
39
Analisi degli eventi passo passo
n Individuare
il componente principale
¨ Definire
una classe che estende JFrame o JPanel
¨ Nel costruttore inizializzare i componenti grafici
¨ Utilizzare variabili di istanza per i componenti che
devono essere acceduti in altri metodi della
classe o nei listener
n Stabilire
quali sono gli eventi che interessano
e quindi i tipi di listener utilizzare
¨ Implementare
l’interfaccia del listener o estendere
l’Adapter come classe interna
40
Analisi degli eventi passo passo
n Definire
in quali aree vengono generati gli
eventi cioè a quali componenti “agganciare” i
listener
¨ registrare
i listener definiti ai componenti (da fare
nel costruttore della classe generale)
n Definire
le azioni da eseguire nei metodi dei
Listener
41
Ricapitolando…
1.
2.
3.
4.
5.
Definire una classe principale che estende
JFrame o JPanel
Nel costruttore inizializzare componenti
grafici e listener
Stabilire quali sono gli eventi e a in quali
componenti
Implementare i listener e registrarli
Definire le azioni da eseguire nei metodi dei
Listener
42