1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di...

14
1 Grafica ed eventi Più movimento alle classi

Transcript of 1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di...

Page 1: 1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di un componente? Ogni componente Swing ha il metodo.

1

Grafica ed eventi

Più movimento alle classi

Page 2: 1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di un componente? Ogni componente Swing ha il metodo.

2

JComponent e Repaint 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();

Il repaint comporta la chiamata a metodo paintComponent(Graphics g) Utile nei quando si usano componenti per le animazioni

Page 3: 1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di un componente? Ogni componente Swing ha il metodo.

3

JFrame 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

Esempiopublic class Myframe extends JFrame{

private JButton b;public Myframe(){

b=new JButton(“pulsante”);…

}public void mioMetodo(){

b.setForeground(Color.RED);}

}

Page 4: 1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di un componente? Ogni componente Swing ha il metodo.

4

Listener Vengono invocati a seguito di un determinato

evento Alcuni listener di interesse:

ActionListenerMouseListenerMouseMotionListenerMouseWheelListener

I metodi dei listener vengono invocati in maniera automatica dal gestore di eventi Java

Page 5: 1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di un componente? Ogni componente Swing ha il metodo.

5

Listener e accesso alla classe 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);

}}

}

Page 6: 1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di un componente? Ogni componente Swing ha il metodo.

6

Listener e Adapter Adapter

Di ogni tipo di listener esiste un AdapterPer ogni *Listener esiste *Adapter ad eccezione

di quelli con zero o uno metodi. ESEMPIO:

MouseAdapter MouseMotionListener MouseMotionAdapter MouseWheelListener MouseWheelAdapter

Page 7: 1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di un componente? Ogni componente Swing ha il metodo.

7

Registrazione dei Listener Come registrare un listener

*Listener: ActionListener,MouseListener, MouseMotionListener …

Per aggiungere un *Listener ad un oggetto cc.add*Listener(listener);

Esempio:JButton b=new JButton(“mio pulsante”);ActionListener l=new …b.addActionListener(l);b.addMouseMotionListener(…)

Page 8: 1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di un componente? Ogni componente Swing ha il metodo.

8

Analisi degli eventi passo passo Individuare il componente principale

Definire una classe che estende JFrame o JPanelNel costruttore inizializzare i componenti graficiUtilizzare variabili di istanza per i componenti che

devono essere acceduti in altri metodi della classe o nei listener

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

Page 9: 1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di un componente? Ogni componente Swing ha il metodo.

9

Analisi degli eventi passo passo Definire in quali aree vengono generati gli

eventi cioè a quali componenti “agganciare” i listenerregistrare i listener definiti ai componenti (da fare

nel costruttore della classe generale) Definire le azioni da eseguire nei metodi dei

Listener

Page 10: 1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di un componente? Ogni componente Swing ha il metodo.

10

Ricapitolando…1. Definire una classe principale che estende

JFrame o JPanel

2. Nel costruttore inizializzare componenti grafici e listener

3. Stabilire quali sono gli eventi e a in quali componenti

4. Implementare i listener e registrarli

5. Definire le azioni da eseguire nei metodi dei Listener

Page 11: 1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di un componente? Ogni componente Swing ha il metodo.

11

Esercizio n.1 Realizzare una applicazione che permette il

trascinamento di una ellissi all’interno di un frameClick all’interno della ellissi per iniziare il

trascinamentoMovimento del mouse

con pulsante per cliccato

per spostare l’ellissiVisualizzazione della

posizione x,y

Page 12: 1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di un componente? Ogni componente Swing ha il metodo.

12

Esercizio n.1 Osservazioni:

Occorre differenziare il click iniziale dal trascinamento

Capire quali eventi occorrono

La pallina si deve muovere quando il click iniziale è stato fatto all’interno della stessa

Come fare a capire se x,y appartengono ad un cerchio?

Quando disegno la pallina in movimento devo fare attenzione al delta tra l’angolo a sinistra e il punto in cui è trascinata dal mouse

Page 13: 1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di un componente? Ogni componente Swing ha il metodo.

13

Esercizio n.2 Aggiungere al pannello precedente 2 pulsanti

con le etichette “Rosso” e “Verde” La pressione del primo imposta il colore Rosso

alla pallina, mentre il secondo usa il Verde Aggiungere una JSpinner che imposta

l’altezza della pallina in base al valore specificato

Page 14: 1 Grafica ed eventi Più movimento alle classi. 2 JComponent e Repaint Come chiedere il ridisegno di un componente? Ogni componente Swing ha il metodo.

14

Esercizio n.3 per casa A partire dall’esercizio originale, aggiungere

una seconda pallina rossa che possa essere spostata in maniera indipendente dalla prima