Sehen wir uns die Einhaltung der Vereinbarungen für eine Bean anhand eines Beispiels an:
Aufgabe der Bean:
Darstellung eines Kreises
In derAbbbildung sieht man die importierte Bean im Component Inspector von NetBeans (freeware), in der hieraxhischen Gliederung des GUI, als Icon in der Leiste unter dem Reiter Bean und angewendet auf der Bühne. Dadurch können die Eigenschaften der Bean im Eigenschaftsinspector eingestellt werden.

Nun zu den Vorbereitungen:
Dient zum testen der Funktionalität der Beanklasse. Wird im Bean nicht eingebunden.
public class Start {
public static void main(String[] args) {
Fenster f = new Fenster();
f.pack();
f.show();
}
} |
Stellt alles zur Verfügung was vereinbart wäre um eine Bean verwenden zu können.
Da ich mich entscheide, das eine Eigenschaft einen Wert bezieht, der mit set/get Methoden erreicht wird, stellt jede einzelne Eigenschaft get/set Methoden bereit.
Es werden keine Vorkehrungen getroffen, damit sich das Bean seinen Zustand abspeichern kann und sozusagen merkt (serialisierbar)
Die Beanklasse ist eine Erweiterung der Klasse Component, einer Art root Klasse betreffend AWT und Swing. Sie kann dadurch in jeder grafischen Swing AWT Umgebung verwendet werden. Sie ist zu verwenden wenn die Beans JFrame, JPanel und ein Layoutmanager Bean vorhanden sind.
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Dimension;
public class Kreis extends Component{
private int entfernung_x;
private int entfernung_y;
private int durchmesser;
public Kreis(){
}
public void setEntfernung_x(int x){
this.entfernung_x = x;
repaint();
}
public int getEntfernung_x(){
return this.entfernung_x;
}
public void setEntfernung_y(int y){
this.entfernung_y = y;
repaint();
}
public int getEntfernung_y(){
return this.entfernung_y;
}
public void setDurchmesser(int durchmesser){
this.durchmesser = durchmesser;
repaint();
}
public int getDurchmesser(){
return this.durchmesser;
}
public void paint(Graphics g){
g.fillOval(this.entfernung_x,this.entfernung_y,durchmesser,durchmesser);
}
//Achtung: unbedingt einbinden, sonst weiß die Componente nie,
//wie groß sie auf der Bühne ist!!
public Dimension getPreferredSize(){
return new Dimension(this.entfernung_x+durchmesser,this.entfernung_y+durchmesser);
}
} |
Ohne der BeanInfoklasse funktionieren Beans in manchen GUI Entwicklungsumgebungen nicht. Sie enthält unter anderem auch die Vereinbarung, wie das Bean in der Leiste der importierten Beans auszusehen hat:
Icon 32 Pixel color:
Icon32c.gif,
Hintergrund transparent
Icon 16 Bixel color:
Icon16c.gif,
Hintergrund transparent
import java.beans.SimpleBeanInfo;
import java.beans.BeanInfo;
import java.awt.Image;
public class KreisBeanInfo extends SimpleBeanInfo{
public Image getIcon(int iconKind) {
if (iconKind == BeanInfo.ICON_MONO_16x16 || iconKind == BeanInfo.ICON_COLOR_16x16 ) {
Image img = loadImage("Icon16c.gif");
return img;
}
if (iconKind == BeanInfo.ICON_MONO_32x32 || iconKind == BeanInfo.ICON_COLOR_32x32 ) {
Image img = loadImage("Icon32c.gif");
return img;
}
return null;
}
} |
Beans werden nur als JAR Files akzeptiert:
Ein JAR File für Beans beinhaltet immer eine Textdatei die angibt, welche Klasse die Bean ist. Und die Namen weiterer eingebundener Klassen. Diese Textdatei nennt man auch Manifest.
Somit lautet der Text:
Manifest-version: 1.0
Name: Kreis.class
Java-Bean: True
Name: KreisBeanInfo.class

Name der Archivdatei: firstbean.jar
gewählte Optionen für jar:
v ... Bericht auf der Console ausgeben
c ... omprimieren
f ... ile speichern
m ... anifestdatei erstellen
Syntax: jar vcfm nameJarArchive.jar nameTextDateiAlsManifestVerwendet.txt allesAndere
Somit lautet in DOS der Befehl:
jar vcfm firstbean.jar text.txt Kreis.class KreisBeanInfo.class Icon32c.gif Icon16c.gif
(Bei demos meist nicht möglich!! auch wenn das manche Flaschen erzählen:-)
Bean importieren und verwenden.