JavaBeans Java inproc Komponenten Übersicht Komponentenbasierte Programmierung in Java 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 6.2 (c) Peter Sturm, Universität Trier 1
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) JugglerBean aus Toolbox auswählen und plazieren AFCW - 6 JavaBeans 6.4 (c) Peter Sturm, Universität Trier 2
JugglerBean (2) 2 ExplicitButton mit Start und Stop hinzufügen AFCW - 6 JavaBeans 6.5 JugglerBean (3) Stop : Edit->Events->button push->actionperformed AFCW - 6 JavaBeans 6.6 (c) Peter Sturm, Universität Trier 3
JugglerBean (4)... mit JugglerBean verknüpfen AFCW - 6 JavaBeans 6.7 JugglerBean (5) Automatisch generierter Code 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 6.8 (c) Peter Sturm, Universität Trier 4
Eine eigene Bean Beispiel aus Core Java 2, Volume II, Advanced Features 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 {... private static final int MINSIZE = 50; private Image image = null; private String filename = ""; AFCW - 6 JavaBeans 6.10 (c) Peter Sturm, Universität Trier 5
setfilename() und getfilename() 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 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 6.12 (c) Peter Sturm, Universität Trier 6
Vollständige Bean *.class Dateien für alle benötigten Klassen 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 Bean testen AFCW - 6 JavaBeans 6.14 (c) Peter Sturm, Universität Trier 7
BeanProperties BeanBox erkennt Properties über Namen der Zugriffsfunktionen 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 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 6.16 (c) Peter Sturm, Universität Trier 8
Property-Arten (contd.) Bound Property Listener werden über Änderungen informiert Zusätzlicher Implementierungsaufwand Bean muß bei Änderung PropertyChange-Event senden Verwaltung aller Listener: 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 AFCW - 6 JavaBeans 6.18 (c) Peter Sturm, Universität Trier 9
Alternativen BeanBox ist veraltete aber schöne Demonstration der wesentlichen Bean-Eigenschaften Kleinere Inkompatibilitäten mit Java 1.4 Neuere Fassung: Bean Builder Primärer Einsatz: Integrierte Entwicklungsumgebungen JBuilder NetBeans AFCW - 6 JavaBeans 6.19 (c) Peter Sturm, Universität Trier 10