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
Scarica

JFrame