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