JavaBeans - Universität Trier

Werbung
Application Frameworks and Componentware
Wintersemester 2002/03
JavaBeans
Java inproc Komponenten
Übersicht
• Komponentenbasierte Programmierung in Java
© 2000, Peter Sturm, Trier
• JavaBeans werden in der JVM der Anwendung ausgeführt
• JavaBeans sind Komponenten, die
– über Zugriffsklassen verfügen
– bestimmte Namenskonventionen bei den Methoden einhalten
– über Dialogboxen konfigurierbar sind
– neuen Programmiermethoden (Visual Programming) zugänglich
sind
• Vergleichbar mit
– Controls in OLE, COM, ActiveX (inproc)
– Konfiguiermöglichkeiten in Visual Studio
AFCW - 6 JavaBeans
(c) Peter Sturm, Universität Trier
6.2
1
Application Frameworks and Componentware
Wintersemester 2002/03
© 2000, Peter Sturm, Trier
Die BeanBox
•
Prototyp einer IDE mit visuellen
Programmiereigenschaften
•
4 Fenster
– BeanBox: Aktuelle
Anwendung
– ToolBox: Auflistung aller
verfügbaren Beans
– PropertiesBox: Eigenschaften
der aktuellen Bean lesen und
konfigurieren
– MessageTracer
AFCW - 6 JavaBeans
6.3
Beispiel: JugglerBean (1)
© 2000, Peter Sturm, Trier
• JugglerBean aus Toolbox auswählen und plazieren
AFCW - 6 JavaBeans
(c) Peter Sturm, Universität Trier
6.4
2
Application Frameworks and Componentware
Wintersemester 2002/03
JugglerBean (2)
© 2000, Peter Sturm, Trier
• 2 ExplicitButton mit „Start“ und „Stop“ hinzufügen
AFCW - 6 JavaBeans
6.5
JugglerBean (3)
© 2000, Peter Sturm, Trier
• „Stop“: Edit->Events->button push->actionPerformed
AFCW - 6 JavaBeans
(c) Peter Sturm, Universität Trier
6.6
3
Application Frameworks and Componentware
Wintersemester 2002/03
JugglerBean (4)
© 2000, Peter Sturm, Trier
• ... mit
JugglerBean
verknüpfen
AFCW - 6 JavaBeans
6.7
JugglerBean (5)
• Automatisch generierter Code
© 2000, Peter Sturm, Trier
package tmp.sunw.beanbox;
import sunw.demo.juggler.Juggler;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class ___Hookup_1653fe1423 implements
java.awt.event.ActionListener, java.io.Serializable {
public void setTarget(sunw.demo.juggler.Juggler t) {
target = t;
}
public void actionPerformed(java.awt.event.ActionEvent arg0) {
target.stopJuggling(arg0);
}
private sunw.demo.juggler.Juggler target;
}
AFCW - 6 JavaBeans
(c) Peter Sturm, Universität Trier
6.8
4
Application Frameworks and Componentware
Wintersemester 2002/03
Eine eigene Bean
• Beispiel aus „Core Java 2, Volume II, Advanced Features“
© 2000, Peter Sturm, Trier
• ImageViewerBean
– Darstellung einer Bilddatei
AFCW - 6 JavaBeans
6.9
ImageViewerBean
import java.awt.*;
import java.io.*;
import javax.swing.*;
public class ImageViewerBean
extends JPanel
implements Serializable {
© 2000, Peter Sturm, Trier
...
private static final int MINSIZE = 50;
private Image image = null;
private String fileName = "";
}
AFCW - 6 JavaBeans
(c) Peter Sturm, Universität Trier
6.10
5
Application Frameworks and Componentware
Wintersemester 2002/03
setFileName() und getFileName()
© 2000, Peter Sturm, Trier
public void setFileName(String f) {
fileName = f;
image = Toolkit.getDefaultToolkit().getImage(fileName);
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(image, 0);
try { tracker.waitForID(0); }
catch (InterruptedException e) {}
repaint();
}
public String getFileName() {
return fileName;
}
AFCW - 6 JavaBeans
6.11
... und der Rest
© 2000, Peter Sturm, Trier
public void paint(Graphics g) {
if (image == null) {
g.drawRect(0, 0,getWidth()-1,getHeight()-1);
}
else
g.drawImage(image, 0, 0, this);
}
public Dimension getPreferredSize() {
if (image == null)
return new Dimension(MINSIZE, MINSIZE);
return new Dimension(
image.getWidth(null),image.getHeight(null));
}
AFCW - 6 JavaBeans
(c) Peter Sturm, Universität Trier
6.12
6
Application Frameworks and Componentware
Wintersemester 2002/03
Vollständige Bean
• *.class Dateien für alle benötigten Klassen
© 2000, Peter Sturm, Trier
• Manifsetdatei:
– Welche Klassen gehören zur Bean
– Beispiel für ImageViewerBean
• ImageViewerBean.mf:
Name: ImageViewerBean.class
Java-Bean: True
• jar-File erzeugen:
– jar cfm ImageViewerBean.jar ImageViewerBean.mf *.class
AFCW - 6 JavaBeans
6.13
© 2000, Peter Sturm, Trier
Bean testen
AFCW - 6 JavaBeans
(c) Peter Sturm, Universität Trier
6.14
7
Application Frameworks and Componentware
Wintersemester 2002/03
BeanProperties
• BeanBox erkennt Properties über Namen der Zugriffsfunktionen
© 2000, Peter Sturm, Trier
• BeanProperty X
– Verwendung sogenannter Decapitalization:
• aus setMeineProp bzw. getMeineProp wird meineProp
• Angabe der Zugriffsfunktionen:
– public X getX ()
• Ausnahme: public boolean isX ()
– public void setX ( X x )
• Nurleseeigenschaften: Keine setX()-Methode
AFCW - 6 JavaBeans
6.15
Property-Arten
© 2000, Peter Sturm, Trier
• Simple Property
– Variable speichert einen einfachen Wert
• Indexed Property
– Speicherung eines Feldes
– Zugriffsfunktionen
• X[] getX ()
• void setX ( X[] x)
• X getX ( int i )
void setX ( int i, X x )
AFCW - 6 JavaBeans
(c) Peter Sturm, Universität Trier
6.16
8
Application Frameworks and Componentware
Wintersemester 2002/03
Property-Arten (contd.)
• Bound Property
– Listener werden über Änderungen informiert
– Zusätzlicher Implementierungsaufwand
• Bean muß bei Änderung PropertyChange-Event senden
• Verwaltung aller Listener:
© 2000, Peter Sturm, Trier
– void addPropertyChangeListener ( ... )
– void removePropertyChangeListener ( ... )
• Convenience-Klasse PropertyChangeSupport vorhanden
• Constraint Property
– Bound Property mit Vetorecht der Listener
AFCW - 6 JavaBeans
6.17
Property-Editoren
BeanBox stellt
für Grundtypen
Editoren zur
Verfügung
•
Editoren für
anwendungsspezifische
Methoden
integrierbar
© 2000, Peter Sturm, Trier
•
AFCW - 6 JavaBeans
(c) Peter Sturm, Universität Trier
6.18
9
Application Frameworks and Componentware
Wintersemester 2002/03
Alternativen
• BeanBox ist veraltete aber schöne Demonstration der wesentlichen
Bean-Eigenschaften
– Kleinere Inkompatibilitäten mit Java 1.4
© 2000, Peter Sturm, Trier
• Neuere Fassung: Bean Builder
• Primärer Einsatz: Integrierte Entwicklungsumgebungen
– JBuilder
– NetBeans
– …
AFCW - 6 JavaBeans
(c) Peter Sturm, Universität Trier
6.19
10
Herunterladen