Sei sulla pagina 1di 10

Java Cos un JavaBean

java beans e programmazione visuale


Un JavaBean (o semplicemente Bean)
un componente software riusabile
G. Prencipe Analogia con i componenti elettronici
prencipe@di.unipi.it I Bean possono essere manipolati
visualmente allinterno di appositi
strumenti di programmazione avanzati
Si possono realizzare semplici applicazioni
senza scrivere nemmeno una riga di
codice!

Componenti software Componenti software

Il concetto di componente molto diffuso Componenti base di interfaccia utente


in altre industrie: Classici: pulsanti, campi di testo, menu, ecc.
Elettronica: valvole, condensatori, resistenze, ...
Tradizionalmente disponibili come librerie o toolkit di sistema
Automobilistica: ricambi non originali
Usati come Bean, possono essere pi facilmente integrati
Vantaggi dei componenti
Facilit di assemblaggio
Interfaccia uniforme
Versioni alternative (con la stessa interfaccia)
fra cui scegliere

1
Componenti software Componenti software
Componenti avanzati di Intere micro-applicazioni
interfaccia utente Serve un foglio elettronico? un
Servono per fornire funzioni di programma di videoscrittura?
manipolazione fuori standard Usiamo un Bean pi ciccioso
Esempio: un calendario per degli altri...
selezionare una data Linterfaccia di base
Possono essere usati tali e quali comunque la stessa
in tante applicazioni: vantaggio! Lofferta vasta:
programmi di grafica
display di mappe per i GIS

Componenti software Componenti software

Componenti non-visuali Chiunque pu costruire nuovi Bean!


Non hanno uninterfaccia grafica visibile Partendo da zero
allutente Creando sottoclassi di Bean esistenti
Per forniscono servizi ad altri Bean: Trasformando vecchie classi in Bean
Bean che fanno calcoli
I nuovi Bean possono essere usati come
Bean che si connettono in rete
Bean che accedono a basi di dati
tutti gli altri
Bean che memorizzano e gestiscono uno stato Gli strumenti di programmazione non
Linterfaccia per il programmatore la stessa di sono limitati a un insieme di Bean
quella dei Bean visuali predefinito

2
Assemblaggio Struttura di un Bean
I Bean vengono Un Bean una classe Java...
assemblati con degli ... i cui metodi hanno dei nomi particolari
strumenti adeguati La denominazione standard consente agli strumenti di
Il risultato assemblaggio di scoprire le caratteristiche di Bean
sconosciuti
unapplicazione basata
sui Bean Un Bean pu essere usato in due contesti:
A tempo di progettazione (design time)
Si realizzano
A tempo desecuzione (run time)
applicazioni tirando i
fili anzich scrivendo
codice

Caratteristiche di un Bean Caratteristiche di un Bean


Eventi: un Bean pu generare eventi, che poi vengono propagati e
Propriet: analoghe agli attributi di una classe causano delle reazioni
Per una certa propriet xxx si creano Non hanno un corrispondente nativo nel linguaggio

(tipicamente) due metodi Simili al modello dei listener delle Swing


addBounceListener(BounceListener) e
setXxx() e getXxx() removeBounceListener(BounceListener) per gestire levento
BounceEvent
Per una propriet booleana possibile
alternativamente utilizzare un metodo chiamato Metodi: solita roba, corrispondono ai metodi della classe
isXxx() per testare se la propriet vera o no Sono gli altri metodi nel bean (che non seguono le convenzioni dette
sopra) e sono semplicemente public
Laccesso avviene esclusivamente tramite
metodi get...() e set...()

3
Esempio Propriet
public class Frog {
private int jumps; Definiscono lo stato corrente di un Bean
private boolean jmpr;
Per i Bean visuali, le propriet influenzano
private .;
spesso la rappresentazione grafica
public int getJumps() {return jumps;}
public void setJumps(int newJumps) {jumps=newJumps;} Poich la modifica di una propriet avviene
public boolean isJumper(){return jmpr;} attraverso metodi, possibile far reagire il
public void setJumper(boolean j){impr=j;}
public void addActionListener(ActionListener l){.}
Bean a modifiche alle sue propriet
In particolare, modifiche alle propriet possono
// Metodo ordinario
generare eventi (vedremo fra breve)
public void gracchia(){System.out.println(Gracchia!!;}
}

Esempio: Esempio:
Propriet JButton Propriet JButton

Propriet Descrizione Propriet Descrizione


x, y, width, height posizione e dimensione del pulsante voidheight
x, y, width, setFont(Font f)
posizione e dimensione del pulsante
Font getFont()
border, borderPainted quale bordo disegnare intorno al pulsante border, borderPainted quale bordo disegnare intorno al pulsante
Grafica

Grafica

font fonte da usare per letichetta font fonte da usare per letichetta
icona da usare per il pulsante attivo o icona da usare perb)
void setSelected(boolean il pulsante attivo o
icon, disabledIcon icon, disabledIcon
disabilitato disabilitato
boolean isSelected()
enabled il pulsante abilitato? enabled il pulsante abilitato?
selected il pulsante premuto? selected il pulsante premuto?
Stato

Stato

showing il pulsante visibile? showing il pulsante visibile?


chi avvisare se viene fatto il drag&drop chi avvisare se viene fatto il drag&drop
dropTarget dropTarget
su questo pulsante su questo pulsante
...

parent il contenitore che contiene il pulsante


...

parent il contenitore che contiene il pulsante

4
Property Editor Eventi
A design time, gli strumenti di Un Bean pu generare eventi in risposta a stimoli esterni
sviluppo (nellesempio, VisualAge Azioni dellutente
della IBM) forniscono uninterfaccia
grafica per impostare le propriet dei Cambiamenti di valore delle propriet
Bean Timer, eventi di rete, ...
A run time, il programma pu ... e qualunque altra cosa
modificare dinamicamente le propriet
Altri Bean che sono interessati a sapere quando si
chiamando i metodi set...() e
ispezionarle chiamando get...() o is...()
verificano questi eventi possono registrarsi presso il
Bean che li genera
Quando si verificher levento, verr chiamato un
particolare metodo dellascoltatore (eventualmente
passando dei parametri)

Esempio: Esempio:
Eventi JButton Eventi JButton mouseClicked
mouseDragged
actionPerformed
mouseEntered
mouseExited
Evento mouseMoved
Descrizione
Evento Descrizione
actionEvents mousePressed
qualunque azione dellutente
Azioni utente

actionEvents qualunque azione dellutente mouseReleased focusGained


Azioni utente

mouseEvents qualunque operazione col mouse


focusLost
mouseEvents qualunque operazione col mouse
focusEvents focusPainted
qualunque cambiamento di focus
focusEvents qualunque cambiamento di focus
keyEvents qualunque pressione di tasti
keyPressed

}
keyEvents qualunque pressione di tasti keyReleased
enabled keyTypedlo stato di abilitazione cambiato
enabled lo stato di abilitazione cambiato
Propriet
Propriet

selected lo stato di selezione cambiato


selected lo stato di selezione cambiato
showing propertyChange
lo stato di visibilit cambiatio
showing lo stato di visibilit cambiatio
text letichetta del pulsante cambiata
text letichetta del pulsante cambiata
qualcuno ha posto il veto su un
...

qualcuno ha posto il veto su un vetoableChangeEvents


vetoableChangeEvents cambiamento di valore di una propriet
...

cambiamento di valore di una propriet

5
Propriet ed Eventi Propriet ed Eventi

Le propriet possono essere... Gli eventi sono


semplici: hanno un valore che pu essere rappresentati da classi, che formano gerarchie
Solo letto (read only) es. showing di JButton di ereditariet (come per le eccezioni)
Solo scritto (write only) estremamente raro Identificati da un nome, che descrive il tipo di
evento
Letto e scritto caso pi comune
Accompagnati da parametri (attributi delle
bounded: se il loro valore cambia, viene
classi che li rappresentano) che ne specificano
generato un evento a cui altri possono reagire i dettagli
constrained: un ascoltatore pu opporsi (porre per esempio: gli eventi MouseEvent hanno come
il veto) a un cambiamento di valore attributi la posizione (x,y) e il numero di click
consecutivi (per identificare il doppio click)

Ok, ma cosa c dietro? Codice per le propriet


Nellinfrastruttura dei JavaBeans non c niente di Esempio: una propriet BaseDate di tipo Date
magico, tutto fatto con mezzi comuni
I Bean sono normalissime classi, Leggibile, scrivibile, e bounded (genera eventi)
e possono essere scritti o usati private Date fieldBaseDate = new Date();
anche con TextPad
public Date getBaseDate() {
In particolare, il legame fra return fieldBaseDate;
}
propriet ed eventi
esplicitamente visibile nel public void setBaseDate(Date baseDate) {
codice sorgente Date oldValue = fieldBaseDate;
fieldBaseDate = baseDate;
firePropertyChange("baseDate", oldValue, baseDate);
}

6
PropertyChangeEvents Come si ricevono gli eventi
Cosa fa Chi vuole essere informato di un evento
firePropertyChange("baseDate",oldValue,baseDate)
si registra presso chi genera levento
Se il vecchio valore uguale al nuovo (ovvero, se il valore Il metodo da chiamare per registrarsi
della propriet non cambiato), non fa nulla addTipoEventoListener(TipoEventoListener l)
Altrimenti, genera un evento di tipo PropertyChange (del Quando si verifica un evento, chi lo
gruppo dei ChangeEvents), passando come parametri il genera chiama il listener di tutti gli
nome della propriet baseDate, il vecchio e il nuovo valore
ascoltatori registrati
Quando non si pi interessati, ci si de-
registra chiamando il metodo
removeTipoEventoListener(TipoEventoListener l)

Generazione degli eventi


Come si ricevono gli eventi (codice leggermente semplificato)

public void firePropertyChange(String propertyName,


Linterfaccia TipoEventoListener definisce i Object oldValue, Object newValue)
{
metodi da chiamare if (oldValue != null && newValue != null
&& oldValue.equals(newValue))
Per PropertyChangeListener: return;

public void propertyChange(PropertyChangeEvent PropertyChangeEvent evt =


evt) new PropertyChangeEvent(source, propertyName,
oldValue, newValue);
Per VetoableChangeListener: if (listeners != null) {
public void vetoableChange(PropertyChangeEvent for (int i = 0; i < listeners.size(); i++) {
PropertyChangeListener listener =
evt) throws PropertyVetoException (PropertyChangeListener)listeners.elementAt(i);
listener.propertyChange(evt);
}
}
}

7
Ricezione degli eventi
(codice leggermente semplificato) Programmazione visuale
public void propertyChange(PropertyChangeEvent evt)
{ Abbiamo visto come una delle caratteristiche
if (evt.getSource() == CalendarPage.this &&
(evt.getPropertyName().equals("baseDate")))
migliori di Java legata al riutilizzo del
/* cambiata baseDate */ codice
if (evt.getSource() == CalendarPage.this.getDayButton() && La parte di codice pi riutilizzabile chiaramente
(evt.getPropertyName().equals("background")))
/* cambiata la propriet background di DayButton */ la classe
/* ... e cos via ... */ Per queste caratteristiche, sarebbe
}
auspicabile avere un modo per costruire
Ma per fortuna, non davvero necessario scrivere
codice di questo tipo applicazioni in modo automatico
Gli strumenti di programmazione lo fanno per noi! Si definiscono le componenti dellapplicazioni, le
si selezionano e assemblano come se si
stessero assemblando chip su una scheda

Programmazione visuale Programmazione visuale


Un modo rapido per sviluppare applicazioni La programmazione visuale (Visual Programming) ebbe
enorme successo con il Visual Basic
Si piazzano componenti visuali e non visuali su una Le componenti erano rappresentate graficamente
superficie di lavoro In effetti, uno dei settori in cui questo modo di costruire applicazioni
Si connettono propriet, eventi e metodi dei vari utilizzato legato alla costruzione di interfacce grafiche
Come abbiamo visto con VE
componenti secondo la logica dellapplicazione
In generale, sistemare le componenti su un piano di lavoro
Si scrive quel po di codice extra che serve, e lo si
non sufficiente per completare un programma
connette ai componenti
I connettori sono essi stessi componenti!
Un esempio visto il Visual Editor di Eclipse

8
Programmazione visuale Programmazione visuale
Spesso necessario modificare le caratteristiche Un oggetto (componente) comunque qualcosa in pi di un
delle componenti (colori, testo, database a cui la insieme di propriet
componente collegata) costituito anche da comportamenti
Le caratteristiche che possono essere modificate a I comportamenti di una componente sono rappresentati
tempo di design sono le propriet dagli eventi
Definiscono cosa pu accadere alla componente durante
possibile cos manipolare le propriet delle lesecuzione
componenti allinterno del costruttore automatico di Si decide cosa fare in seguito a un evento legando ad esso un
applicazioni (application builder tool) pezzo di codice

Programmazione visuale e JavaBeans Java


java beans e programmazione visuale
Il costruttore di applicazioni interroga
dinamicamente le componenti e ricava le
propriet e gli eventi che la componente pu
gestire
Ad esempio, i beans sono utilizzati dal
Visual Editor di Eclipse per costruire le
fine
interfacce

9
Programmazione visuale

Un metodo di programmazione innovativo


Per sua natura, si presta ad essere
spiegato in vivo su un esempio
Scriviamo da zero un client grafico
per il TimeServer che abbiamo sviluppato
nella
prima lezione!
Metteremo insieme: JavaBeans,
VisualAge e programmazione di
rete con i socket

10

Potrebbero piacerti anche