JavaBeans
Grundlagen
Eigenschaften
Ereignisse
Konfiguration
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
1
Begriffsdefinition
"A JavaBean is a reusable software component
that can be manipulated visually in a builder tool."
Softwarekomponente
•
Wiederverwendbare, in sich abgeschlossene Einheit
Interaktive Manipulation in Entwicklungswerkzeug (GUI-Builder)
•
Visuelle Programmierung
•
Sichtbare und unsichtbare Beans
•
Zusammenstellung zu komplexeren Beans, Applets oder Anwendungen
•
Serialisierung oder Erzeugung von Programmcode
Definiert durch Java-Klasse, die bestimmten Konventionen folgt
•
Klassendefinition und Methodensignaturen
•
Ereignismechanismus
Hilfsklassen im Paket java.beans
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
2
Grundlegende Eigenschaften von Beans
wird durch ein Objekt repräsentiert; existiert sowohl zur Design-Zeit als auch
zur Laufzeit
ist durch eine Klasse definiert
besitzt konfigurierbare Eigenschaften, durch welche das Bean angepasst
werden kann
verwendet Ereigniskonzept zur Interaktion mit anderen Programmteilen
die Programmierung muss bestimmten Konventionen („Design Patterns“)
folgen:
•
Klasse hat parameterlosen Konstruktor
•
Zugriff auf Eigenschaften mittels Getter- und Setter-Methoden
•
Design-Pattern für die Kodierung von Ereignissen
•
Namenskonventionen für Eigenschaften und Ereignisse
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
3
Grundlegende Eigenschaften von Beans (Fortsetzung)
ist serialisierbar und deserialisierbar
erlaubt Introspection, d.h. die Ausforschung und Beschreibung der
Eigenschaften, Methoden und Ereignisse
•
Introspection auf Basis der Design-Patterns und Namenskonventionen
•
Beschreibung durch eigene Informationsklasse (= BeanInfo-Klasse)
erlaubt die interaktive Anpassung in interaktiven Entwicklungswerkzeugen
•
auf Basis der Beschreibung des Beans
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
4
Verwendung von Beans
bei wiederverwendbaren, durch Eigenschaften anpassbaren Komponenten
insbesondere für die interaktive, visuelle Programmierung
sowohl für kleine Komponenten als auch für große Anwendungen, z.B.:
•
Button
•
Timer
•
ImageViewer
•
Spreadsheet
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
5
Beispiel CountdownBean
CountdownBean ist eine wiederverwendbare Komponente für Countdowns
CountdownBean leistet folgendes:
•
man kann eine Countdown-Zeit setzen (Zeit im Millisekunden)
•
man kann Countdown starten
•
man kann Countdown stoppen
•
Bean informiert in bestimmten Zeitintervallen über die Restzeit
- zuerst in größeren Abständen
- zum Ende hin in kürzeren Abständen
•
Bean informiert über Starten, Stoppen und Ende des Countdown
•
Bean ist anpassbar durch
- Intervallzeiten
- Zeitspanne, wenn kurze Intervallzeiten beginnen sollen
Beispielanwendung des CountdownBeans:
•
bei Bombe
•
bei Selbstauslöser in Fotoapparaten
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
6
Beispiel CountdownBean: Klassendiagramm
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
7
Bean-Klasse
wie jede andere Klasse
braucht unbedingt parameterlosen Konstruktor
Beispiel CountdownBean:
public class CountdownBean extends java.lang.Object implements Runnable
{
/** Creates a new instance of CountdownBean */
public CountdownBean() {
...
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
8
JavaBeans
Grundlagen
Eigenschaften
Ereignisse
Konfiguration
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
9
Eigenschaften (Properties)
Bestimmen Erscheinung und Verhalten
•
Können von Entwicklungswerkzeug ausgelesen und verändert werden
Erkennbar an Methodensignatur für Getter- und Setter-Methoden
•
Simple Properties
public <PropType> get<PropertyName>() bzw. public boolean is<PropertyName>()
public void set<PropName>(<PropType> value)
void
int
void
boolean
•
setMaxLength(int maxLength);
getMaxLength();
setEditable(boolean editable);
isEditable();
Indexed Properties
public <PropType>[] get<PropertyName>()
public void set<PropName>(<PropType>[] value)
public <PropType> get<PropertyName>(int i)
public void set<PropName>(int i, <PropType> value)
void
void
float[]
float
setDataSet(float[] dataSet);
setDataSet(int index, float data);
getDataSet();
getDataSet(int index);
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
10
Beispiel CountdownBean: Eigenschaften
Eigenschaften für
• Countdown-Zeit
• langes Intervall
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public void setLongInterval(int i) {
longInterval = i;
}
public int getLongInterval() {
return longInterval;
}
• kurzes Intervall
public void setShortInterval(int i) {
shortInterval = i;
}
public int getShortInterval() {
return shortInterval;
}
• Beginn des kurzen Intervalls
public void setShortIntervalPeriod(int i) {
shortIntervalPeriod = i;
}
public int getShortIntervalPeriod() {
return shortIntervalPeriod;
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
11
JavaBeans
Grundlagen
Eigenschaften
Ereignisse
Konfiguration
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
12
Ereignisse
Kommunikation mit anderen Beans
•
Zustandsänderung wird allen Interessierten mitgeteilt
•
Lose gekoppelte Kommunikation
Quelle
•
Auslöser eines Ereignisses
•
Benachrichtigt Interessierte
Interessierter (Listener)
•
Reagiert auf Ereignis
•
Wird bei Quelle registriert und deregistriert
Ereignisobjekt (EventObject)
•
Informationen über Ereignis
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
13
Design Pattern für Ereignisse
Listener
•
•
Interface welche Ereignismethoden implementiert
kann java.util.EventListener erweitern
public interface TimerListener extends java.util.EventListener {
public void timerAction(TimerEvent e);
}
Quelle
•
implementiert Methoden für das Anfügen und Entfernen von Listener
public void add<ListenerType>(<ListenerType> listener)
public void remove<ListenerType>(<ListenerType> listener);
public class TimerBean {
public void addTimerListener(TimerListener l) { … }
public void removeTimerListener(TimerListener l) { … }
private void fireTimerEvent(TimerEvent e) { … }
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
14
Design Pattern für Ereignisse (Fortsetzung)
Ereignisobjekt
•
•
erweitert java.util.EventObject
kommuniziert Informationen über Ereignis
public class TimerEvent extends java.util.EventObject {
private long time;
public TimerEvent(Object source) {
super(source);
time = System.currentTimeMillis();
}
public long getTime() {
return time;
}
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
15
Beispiel CountdownBean: Countdown-Ereignis
CountdownListener
public interface CountdownEventListener extends EventListener {
void countdownStarted(CountdownEvent e);
void countdownStopped(CountdownEvent e);
void countdownTimeElapsed(CountdownEvent e);
void countdownFinished(CountdownEvent e);
}
CountdownEvent
public class CountdownEvent extends java.util.EventObject {
public CountdownEvent(Object source, int restTime) {
super(source);
this.restTime = restTime;
}
public int getRestTime() {
return restTime;
}
private int restTime;
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
16
Beispiel CountdownBean: Countdown-Ereignis (Forts.)
Quelle
public class CountdownBean extends java.lang.Object implements Runnable {
public void addCountdownEventListener(CountdownEventListener l) {
countDownListenerList.add(CountdownEventListener.class, l);
}
public void removeCountdownEventListener(CountdownEventListener l) {
countDownListenerList.remove(CountdownEventListener.class, l);
}
protected void fireCountdownStartedEvent() {
CountdownEvent event = new CountdownEvent(this, restTime);
CountdownEventListener[] cdLs =
((CountdownEventListener[])lList.getListeners(CountdownEventListener.class));
for (int i = 0; i < cdLs.length; i++) {
cdLs[i].countdownStarted(event);
}
}
protected void fireCountdownTimeElapsedEvent() {
CountdownEvent event = new CountdownEvent(this, restTime);
CountdownEventListener[] cdLList =
((CountdownEventListener[]) lList.getListeners(CountdownEventListener.class));
for (int i = 0; i < cdLs.length; i++) {
cdLs[i].countdownTimeElapsed(event);
}
}
...
JOHANNES KEPLER
UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
17
Bound Properties
Ereigniskonzept für die Benachrichtigung von Wertänderungen bei Properties
Listener PropertyChangeListener
public interface PropertyChangeListener extends EventListener {
void propertyChange(PropertyChangeEvent evt);
}
Ereignisobjekt PropertyChangeEvent enthält alten und neuen Wert
public class PropertyChangeEvent extends java.util.EventObject {
public PropertyChangeEvent(Object source, String propertyName,
Object oldValue, Object newValue) { ... }
public String getPropertyName() { return propertyName; }
public Object getNewValue() { return newValue; }
public Object getOldValue() { return oldValue; }
...
Anmeldung und Abmeldung über addPropertyChangeListener und removePropertyChangeListener; Implementierung mittels PropertyChangeSupport
transient protected PropertyChangeSupport pchglisteners;
public void addPropertyChangeListener(PropertyChangeListener l) {
pchglisteners.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l) {
pchglisteners.removePropertyChangeListener(l);
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
18
Beispiel CountdownBean: PropertyChange-Ereignis
PropertyChange-Ereignis bei Änderung der Countdown-Zeit
public void setTime(int time) {
int oldValue = this.time;
this.time = time;
pchglisteners.firePropertyChange("time", oldValue, this.time);
}
public void addTimeChangeListener(PropertyChangeListener listener) {
pchglisteners.addPropertyChangeListener(listener);
}
public void removeTimeChangeListener(PropertyChangeListener listener) {
pchglisteners.removePropertyChangeListener(listener);
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
19
Constrained Properties
Erlaubt anderen Objekten, Wertänderung bei Property zu verhindern
Listener VetoableChangeListener: Methode vetoableChange wirft
PropertyVetoException
public interface VetoableChangeListener extends EventListener {
void vetoableChange(PropertyChangeEvent evt)
throws PropertyVetoException;
}
Anmeldung und Abmelden von Listeners; Implementierung über
VetoableChangeSupport
transient protected VetoableChangeSupport vchglistener
= new VetoableChangeSupport(this);
public void addVetoableChangeListener(VetoableChangeListener l) {
vchglisteners.addVetoableChangeListener(l); }
public void removeVetoableChangeListener(VetoableChangeListener l) {
vchglisteners.removeVetoableChangeListener(l); }
Setter-Methode soll PropertyVetoException werfen
public void setValue(int value) throws PropertyVetoException {
int oldValue = this.value;
vchglisteners.fireVetoableChange("value", oldValue , value);
this.value = value;
pchglisteners.firePropertyChange("value", oldvalue, on);
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
20
Beispiel CountdownBean: VetoableChange-Ereignis
VetoableChange-Ereignis bei Setzen von langem und kurzem Intervall und Periode
erlaubt Einspruch, wenn Werte nicht akzeptabel, z.B. wenn sie nicht zusammenpassen
transient protected VetoableChangeSupport vchglisteners =
new VetoableChangeSupport(this);
...
public int getLongInterval() {
return longInterval;
}
public void addVetoableChangeListener(VetoableChangeListener l) {
vchglisteners.addVetoableChangeListener(l);
}
public void removeVetoableChangeListener(VetoableChangeListener l) {
vchglisteners.removeVetoableChangeListener(l);
}
public void setLongInterval(int interval) throws PropertyVetoException {
vchglisteners.fireVetoableChange("longInterval", this.longInterval, interval);
longInterval = interval;
}
public void setShortInterval(int interval) throws PropertyVetoException {
vchglisteners.fireVetoableChange("shortInterval", this.shortInterval, interval);
this.shortInterval = interval;
}
...
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
21
Beispiel CountdownBean: start und run-Methoden
public void start() {
restTime = getTime() * 1000;
countdownThread = new Thread(this);
countdownThread.start();
}
public void run() {
fireCountdownStartedEvent();
try {
while (restTime > 0) {
int timeToNextEvent;
if (restTime <= getShortIntervalPeriod()) {
timeToNextEvent = getShortInterval();
} else {
timeToNextEvent = getLongInterval();
}
if (timeToNextEvent > restTime) {
timeToNextEvent = restTime;
}
Thread.sleep(timeToNextEvent);
restTime = restTime - timeToNextEvent;
fireCountdownTimeElapsedEvent();
}
fireCountdownFinishedEvent();
} catch (InterruptedException ign) { }
}
...
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
22
JavaBeans
Grundlagen
Eigenschaften
Ereignisse
Konfiguration
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
23
Introspection
Introspector: versorgt Entwicklungsumgebung mit Informationen über Bean
Î Analysiert Bean und eruiert Eigenschaften, Ereignisse und Methoden
Î verwendet Reflection
Î orientiert sich an den Programmierkonventionen
Î erstellt daraus BeanInfo-Klasse
BeanInfo-Klasse kann auch programmiert werden
BeanInfo-Klasse
•
Klassenname = Name der Bean + "BeanInfo"
•
Implementiert Interface BeanInfo
•
Hilfsklasse SimpleBeanInfo mit leeren Methoden
public interface BeanInfo {
BeanInfo[]
getAdditionalBeanInfo();
BeanDescriptor
getBeanDescriptor();
int
getDefaultEventIndex();
int
getDefaultPropertyIndex();
EventSetDescriptor[] getEventSetDescriptors();
Image
getIcon(int iconKind);
MethodDescriptor[]
getMethodDescriptors();
PropertyDescriptor[] getPropertyDescriptors();
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
24
Konfiguration von Beans
Benutzerdefinierter Editor
•
Konfiguration einer Eigenschaft oder aller Eigenschaften einer Klasse
•
Muss Interface PropertyEditor implementieren
•
Hilfsklasse PropertyEditorSupport
•
Zuordnung über Namenskonvention, PropertyEditorManager, BeanInfo
Background
blue
Benutzerdefinierte Konfigurationsoberfläche
•
Konfiguration einer gesamten Bean
•
Muss Customizer implementieren und sollte Container erweitern
•
Anzeige in Dialogfenster oder Panel
•
Zuordnung zu Bean über BeanInfo
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
25
PropertyEditor (1)
Wird von GUI-Builder für das Setzen einer Eigenschaft verwendet
public interface PropertyEditor {
void setValue(Object value);
Setzen des Wertes beim Bean
Object getValue();
Lesen des Wertes vom Bean
boolean isPaintable();
Gibt an, ob Wert gezeichnet werden soll
void paintValue(java.awt.Graphics gfx,
java.awt.Rectangle box);
Zeichnet Wert im Property-Editor
java.awt.Component getCustomEditor();
Liefert Component zum Editieren der Property
boolean supportsCustomEditor();
True, wenn es Custom-Editor gibt
String getJavaInitializationString();
String der Source-Code zum Setzen darstellt
String getAsText();
Textrepräsentation des Wertes
void setAsText(String text)
throws IllegalArgumentException;
Erzeugt aus Eingabetext den Wert der Property
String[] getTags();
Liefert ein Array von Strings für Combobox im
Property-Editor
...
}
PropertyEditorSupport ist eine leere Basisimplementierung
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
26
PropertyEditor (2)
unterstützt 3 Arten des Setzens:
(1) als Text: muss folgende Methoden implementieren
• String getAsText()
• void setAsText(String text)
(2) Auswahl aus einer Aufzählung: muss folgende Methoden implementieren
• String[] getTags()
• String getAsText()
• void setAsText(String text)
(3) über einen eigenen Dialog:
• boolean isPaintable() - liefert true
• void paintValue(Graphics gfx, Rectangle box)
• boolean supportsCustomEditor() - liefert true
• public Component getCustomEditor()
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
27
Beispiel PropertyEditor: BlinkShape bei Blinker
JavaBean Blinker ermöglicht Blinken in 3 unterschiedlichen Formen
•
Property blinkShape
•
Konstante für die 3 Shapes
public class Blinker extends javax.swing.JComponent implements Serializable
{
public static final int RECT_SHAPE = 1;
public static final int OVAL_SHAPE = 2;
public static final int TRIANGLE_SHAPE = 3;
…
int blinkShape = RECT_SHAPE;
public int getBlinkShape() {
return blinkShape;
}
public void setBlinkShape(int blinkShape) {
this.blinkShape = blinkShape;
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
28
Beispiel PropertyEditor: BlinkShape bei Blinker
Setzen der Eigenschaft über PropertyEditor BlinkShapEditor
public class BlinkShapeEditor extends PropertyEditorSupport {
int[] options = new int[] { 1, 2, 3 };
String[] tags = new String[] { "rectangular", "oval", "triangular" };
•
Erzeugen der String-Repräsentation aus Wert
public String getAsText() {
int val = ((Integer)getValue()).intValue();
try {
return tags[val-1];
} catch (ArrayIndexOutOfBoundsException e) {
return "";
}
}
•
Erzeugen des Wertes aus Text
public void setAsText(String s) throws IllegalArgumentException {
for (int i = 0; i < tags.length; i++) {
if (s.equals(tags[i])) {
setValue(new Integer(options[i]));
return;
}
}
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
29
Beispiel PropertyEditor: BlinkShape bei Blinker (2)
•
Code-Fragment für das Setzen der Property bei Erzeugung von Code durch GUIBuilder
public String getJavaInitializationString() {
int val = ((Integer)getValue()).intValue();
if (val == 1) return "Blinker.RECT_SHAPE";
if (val == 2) return "Blinker.OVAL_SHAPE";
if (val == 3) return "Blinker.TRIANGLE_SHAPE";
return "0";
}
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
30
Beispiel Blinker: Setzen der Eigenschaft blinkShape
Erzeugter Code
Auswahl im Editor
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
31
BeanInfo
Über BeanInfo-Klasse kann die Konfiguration einer JavaBean gestaltet
werden
•
welche Properties und Events sind sichtbar
•
welche PropertyEditors werden verwendet
•
welches Icon wird verwendet
•
…
Interface BeanInfo (Basisimplementierung SimpleBeanInfo)
public interface BeanInfo {
BeanDescriptor getBeanDescriptor();
allgemeine Beschreibung des Bean
EventSetDescriptor[] getEventSetDescriptors(); Beschreibung der Events
PropertyDescriptor[] getPropertyDescriptors(); Beschreibung der Properties
MethodDescriptor[] getMethodDescriptors();
Beschreibung der Methoden
BeanInfo[] getAdditionalBeanInfo();
Zusätzliche BeanInfo-Klassen, die
verwendet werden (z.B. Superklasse)
java.awt.Image getIcon(int iconKind);
Icon für Bean
…
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
32
Beispiel BeanInfo: BeanInfo für Blinker
public class BlinkerBeanInfo extends SimpleBeanInfo {
public PropertyDescriptor[] getPropertyDescriptors() {
try {
PropertyDescriptor blinkShapeDescr
= new PropertyDescriptor("blinkShape", Blinker.class);
blinkShapeDescr.setPropertyEditorClass(BlinkShapeEditor.class);
return new PropertyDescriptor[] {blinkShapeDescr };
} catch (IntrospectionException e) {
return null;
Setzen des PropertyEditors
}
bei Property blinkShape
}
public BeanInfo[] getAdditionalBeanInfo() {
Class superclass = beanClass.getSuperclass();
try {
BeanInfo superBeanInfo = Introspector.getBeanInfo(superclass);
return new BeanInfo[] { superBeanInfo };
}
catch (IntrospectionException ex) {
ex.printStackTrace();
BeanInfo der Superklasse
return null;
übernehmen
}
}
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
33
Beispiel CountdownBean: Anpassung mit Visual Editor
Visual Editor (http://www.eclipse.org/vep/) ist ein Eclipse Tool für die visuelle
interaktive Erstellung von GUIs
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
34
Beispiel CountdownBean: Anpassung in netBeans IDE
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
35
Verpacken von Beans
JavaBean besteht aus mehreren Dateien
•
Auslieferung als JAR-Datei
•
z.B. Java-Klassen, Dokumentation, Bilder, Videos, …
JAR-Werkzeug wird mit JDK mitgeliefert
META-INF\MANIFEST.MF
•
Beschreibt Inhalt der JAR-Datei
Manifest-Version: 1.0
Name: sunw/demo/juggler/Juggler.class
Java-Bean: True
Created-By: 1.2.2 (Sun Microsystems Inc.)
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
36
Zusammenfassung
Komponentenmodell von Java
•
Wiederverwendung
Merkmale einer JavaBean
•
Eigenschaften
•
Ereignisse
Manipulation in Entwicklungswerkzeug
•
Rapid Application Development
•
Introspection
•
PropertyEditors und Customizers
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
37
Literatur
Java Beans Homepage: http://java.sun.com/products/javabeans/
JavaBeans 1.01 API Specification, Sun Microsystems, 1997,
http://java.sun.com/products/javabeans/docs/spec.html
Introduction to the JavaBeans API, Tutorials & Code Camps,
http://java.sun.com/developer/onlineTraining/Beans/JBeansAPI/index.html
JavaBeans 101 Tutorial, Tutorials & Code Camps,
http://java.sun.com/developer/onlineTraining/Beans/bean01/index.html,
http://java.sun.com/developer/onlineTraining/Beans/beans02/index.html
Horstmann, Cornell, Core Java 2, Band 2 - Expertenwissen, Markt und Technik, 2002:
Kapitel 8
Krüger, Handbuch der Java-Programmierung, 3. Auflage, Addison-Wesley, 2003,
http://www.javabuch.de, Kapitel 44
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
38