Java Beans Übersicht, Eigenschaftstypen, Heutiger Stand. 1 Definition z Eine Bean ist eine wieder verwendbare Softwarekomponente basierend auf der JavaBeans-Spezifikation von Sun, die sich visuell mit einem Programmierwerkzeug manipulieren lässt. 2 Java Beans 3 Entwicklung Designzeitpunkt Ausführungszeitpunkt 4 Designzeitpunkt 5 Eigenschaften von Beans z z z z z Eine Bean wird im Programm durch ein Objekt (also eine instanzierte Klasse) repräsentiert. Sie besitzt konfigurierbare Eigenschaften, die ihr Verhalten festlegen. Eine Bean ist serialisierbar und deserialisierbar. Eine Bean sendet Events. Einer Bean kann optional ein Informations-Objekt zugeordnet werden. 6 Bean-Klasse z Es gibt keine Bean-Klasse, die man zum Erstellen von Beans erweitern könnte! z Sichtbare Beans erweitern direkt oder indirekt die Klasse Component. Nicht sichtbare Beans müssen keine bestimmte Superklasse erweitern. z 7 Namensmuster für Eigenschaften z Eigenschaften sind ein wesentliches Designmerkmal von Beans. Beim Namensmuster für Eigenschaften entspricht ein Methodenpaar public X getEigenschaftsName() public void setEigenschaftsName(X x) einer Lese-/Schreibeigenschaft vom Typ X 8 Eine sehr einfache Bean package p; public class Quadrat implements java.io.Serializable { private int zahl; public int getZahl() { return zahl; } public void setZahl(int zahl) { this.zahl = zahl; } public int getQuadrat() { return this.zahl * this.zahl; } } 9 Jar-Archive für Komponenten Listing: Quadrat.mf Manifest-Version: 1.0 Name: p/Qudrat.class Java-Bean: True Im nächsten Schritt packen wir mit jar die Klassen, sowie die Manifest-Datei zu einem Archiv zusammen. $ jar cfm Quadrat.jar Quadrat.mf p/Quadrat.class 10 DEMO Quadrat in NetBeans Switch 11 Namensmuster für Ereignisse Ereignisse von Typ ClickEvent Empfängerschnittstelle: ClickListener Die Methoden zum Hinzufügen und Entfernen eines Empfängers: public void addClickListener(ClickListener e) public void removeClickListener(ClickListener e) 12 Eigenschaftstypen von Beans Eine komplexe Bean hat verschiedene Arten von Eigenschaften, die man in einem Programmierwerkzeug freilegen sollte, damit sie ein Benutzer zur Entwurfzeit setzen oder zur Laufzeit abrufen kann. z Einfache Eigenschaften z z z z Boolesche Eigenschaften Indizierte Eigenschaften Gebundene Eigenschaften Eingeschränkte Eigenschaften 13 Eigenschaftstypen von Beans Einfache Eigenschaften public int getZahl() { … } public void setZahl(int zahl) { … } Boolesche Eigenschaften public boolean isVisible() { … } public void setVisible(boolean v) { … } 14 Indizierte Eigenschaften Methodennamen: public X getName(int index) { … } public void setName(int index, X newValue) { … } Es werden keine Arrays übergeben, sondern die Methoden erwarten jeweils den Index der gewünschten Eigenschaft als zusätzliches Argument. Für das Einhalten der Arraygrenzen ist der Aufrufer selbst verantwortlich! 15 Gebundene Eigenschaften z z z z z andere Komponenten werden über eine Zustandsänderung informiert Die interessierten Beans empfangen vom Auslöser ein PropertyChange-Ereignis, das sie auswerten können. Bei einer Veränderung werden alle registrierten Zuhörer durch ein PropertyChangeEvent informiert Über dieses Ereignis-Objekt erfahren wir den alten und neuen Wert Die Zuhörer werden erst nach der Änderung des internen Zustands informiert. 16 Gebundene Eigenschaften Properties: Properties: val val 1. Objekt/Komponente 25 0 1 BeanClass.val = ??? r tene s i L ge 25; = han C u y l t r Va e e p w o e Pr add =1; n JavaBeanClass { int val = 25; 0; 1; … } 2. Objekt/Komponente BeanClass.val 25 BeanClass.val ==??? alue oldV 3. Objekt/Komponente addPropertyChangeListener oldValue=1; newValue=25; BeanClass.val 25 BeanClass.val ==??? 17 import java.beans.*; import java.awt.*; public class PropertyChangeStringBean extends Canvas { private String string = ""; private PropertyChangeSupport changes=new PropertyChangeSupport(this); public void setString( String newString ) { String oldString = string; string = newString; Beispiel: changes.firePropertyChange( "string", oldString, newString ); Diese Komponente ändert den internen String } über setString(). Nach der Änderung werden public String getString() { Listener informiert. Sie bewirkt sonst nichts alle return string; Großartiges. } @Override public void addPropertyChangeListener( PropertyChangeListener l ) { changes.addPropertyChangeListener( l ); } @Override public void removePropertyChangeListener( PropertyChangeListener l ) { changes.removePropertyChangeListener( l ); } } 18 Eingeschränkte Eigenschaften z Eine Eigenschaft wird durch die Tatsache eingeschränkt, das ein beliebiger Empfänger gegen vorgeschlagene Änderungen „Einspruch erheben“ kann und damit bewirkt, dass die Eigenschaft zur alten Einstellung zurückkehrt. 19 Bean-Eigenschaften anpassen 20 BeanInfo-Klasse z z z explizites Auflisten der freigegebenen Leistungen, die nach außen sichtbar sein sollen Zuordnung eines mit der Bean verwendeten Icons; Anmeldung einer Customizer-Klasse. 21 Literaturhinweise z z z Java ist auch eine Insel von Christian Ullenboom, Galileo Computing Handbuch der Java-Programmierung von Guido Krüger, Addison-Wesley Core Java 2 Bd.2 Expertenwissen C.S.Horstmann, G.Cornell, Addison-Wesley 22 JavaBeans Sergej Sasypkin Fragen? 23