diff options
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100282.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100282.html | 618 |
1 files changed, 618 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100282.html b/Master/Reference Architectures and Patterns/hjp5/html/k100282.html new file mode 100644 index 0000000..53ae047 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100282.html @@ -0,0 +1,618 @@ +<html>
+<head>
+<title>
+Handbuch der Java-Programmierung, 5. Auflage
+</title>
+</head>
+<body>
+<a name="startofbody"></a>
+<script language="JavaScript" src="hjp4lib.js">
+</script>
+<script language="JavaScript">
+installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100279.html;106,k100281.html;107,k100283.html;108,k100287.html");
+</script>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100279.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100281.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100283.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100287.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">Kapitel 44 - Beans
+</table>
+<hr>
+
+
+<!-- Section -->
+<a name="beanbox"></a>
+<h2>44.3 Die Beanbox<a name="ixa103274"></a> </h2>
+<hr>
+<ul>
+<li><a href="k100282.html#beanbox">44.3 Die Beanbox</a>
+<ul>
+<li><a href="k100282.html#sectlevel3id044003001">44.3.1 Beschreibung und Installation</a>
+<ul>
+<li><a href="k100282.html#sectlevel4id044003001001">Installation des BDK</a>
+<li><a href="k100282.html#sectlevel4id044003001002">Die Aufrufscripte</a>
+</ul>
+<li><a href="k100282.html#sectlevel3id044003002">44.3.2 Grundlagen der Bedienung</a>
+<ul>
+<li><a href="k100282.html#sectlevel4id044003002001">Bedienelemente</a>
+<li><a href="k100282.html#sectlevel4id044003002002">Einfügen und Modifizieren von Beans</a>
+<li><a href="k100282.html#sectlevel4id044003002003">Events</a>
+</ul>
+<li><a href="k100282.html#integrationbeans">44.3.3 Integration eigener Beans</a>
+<ul>
+<li><a href="k100282.html#sectlevel4id044003003001">Entwickeln und Übersetzen der Bean</a>
+<li><a href="k100282.html#sectlevel4id044003003002">Erzeugen einer Manifest-Datei</a>
+<li><a href="k100282.html#sectlevel4id044003003003">Erzeugen des jar-Archivs</a>
+<li><a href="k100282.html#sectlevel4id044003003004">Verwenden der eigenen Bean</a>
+</ul>
+<li><a href="k100282.html#sectlevel3id044003004">44.3.4 Serialisierte Beans</a>
+<ul>
+<li><a href="k100282.html#sectlevel4id044003004001">Serialisieren von Beans mit der Beanbox</a>
+<li><a href="k100282.html#sectlevel4id044003004002">Einbinden serialisierter Beans</a>
+</ul>
+</ul>
+</ul>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel3id044003001"></a>
+<h3>44.3.1 Beschreibung und Installation </h3>
+
+<p>
+Zur Unterstützung beim Entwurf und Testen von Beans und als Referenzplattform
+für die Demonstration des Bean-Konzepts wurde von SUN das <a name="ixa103275"><i>Bean
+Development Kit</i></a> (kurz <a name="ixa103276"><i>BDK</i></a>)
+entwickelt. Es wird frei zur Verfügung gestellt und kann beispielsweise
+über die <a name="ixa103277"><i>Java Beans Homepage</i></a> von
+<a href="http://java.sun.com/products/javabeans/">http://java.sun.com/products/javabeans/</a>
+heruntergeladen werden. Während der Erstellung dieses Kapitels
+wurde die Version 1.1 verwendet. Wichtigster Bestandteil des BDK ist
+die <i>Beanbox</i>, die eine einfache Umgebung zum Testen von selbstentwickelten
+Beans zur Verfügung stellt. Bevor wir uns ihrer Bedienung zuwenden,
+soll die Installation des BDK beschrieben werden.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Die Beanbox sollte nicht als vollwertige Test- und Entwicklungsumgebung
+für Java-Beans betrachtet werden. Dazu ist sie zu schwach. Sie
+wurde lediglich entwickelt, um die Bean-Konzepte zu illustrieren und
+eine erste Möglichkeit für ihre Anwendung zur Verfügung
+zu stellen. Bei weitergehendem Einsatz stößt man schnell
+an die Grenzen der Beanbox, und ihr praktischer Nutzen ist recht begrenzt.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
+<tr>
+<td><font color="#FFFFFF"> Warnung </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel4id044003001001"></a>
+<h4>Installation des BDK </h4>
+
+<p>
+Die Installation des BDK ist einfach; Voraussetzung ist ein funktionierendes
+JDK. Unter Windows gibt es ein menügesteuertes Installationsprogramm
+»bdk1_1-win.exe«, das die meisten Schritte übernimmt.
+Nachdem es gestartet wurde, müssen zunächst die Lizenzbedingungen
+akzeptiert werden, dann ist die Eingabe des Installationsverzeichnisses
+erforderlich. Sind mehrere Java-Interpreter vorhanden, muss anschließend
+ausgewählt werden, welcher von ihnen zum Betrieb des BDK verwendet
+werden soll. Nach Drücken des »Install«-Buttons wird
+dann mit der Installation begonnen. Die Installationsroutine legt
+auch einen Uninstall-Eintrag an, mit dem das BDK bei Bedarf deinstalliert
+werden kann.
+
+<!-- Section -->
+
+<a name="sectlevel4id044003001002"></a>
+<h4>Die Aufrufscripte </h4>
+
+<p>
+Nach der Installation befindet sich eine Datei <font color="#660099">run.bat</font>
+im Unterverzeichnis <font color="#000077"><tt>beanbox</tt></font>
+des BDK-Verzeichnisses (analog dazu gibt es das Shell-Script <font color="#000077"><tt>run.sh</tt></font>
+zum Starten der Beanbox auf UNIX-Systemen). Diese Batchdatei setzt
+den <font color="#000077"><tt>CLASSPATH</tt></font> auf die benötigten
+Klassen- und <font color="#660099">.jar</font>-Dateien und startet
+die Beanbox. Sie ist leider etwas archaisch. Einerseits wird der aktuelle
+<font color="#000077"><tt>CLASSPATH</tt></font> überschrieben.
+Zudem war sie im Test mitunter instabil, wenn der <i>HotSpot</i>-Compiler
+aktiviert war. Eine modifizierte Version von <font color="#000077"><tt>run.bat</tt></font>
+könnte etwa so aussehen (analoge Anpassungen können für
+die UNIX-Version vorgenommen werden):
+<font color="#000077">
+<pre>
+@echo off
+set OLDCP=%CLASSPATH%
+echo saving old CLASSPATH in OLDCP: %OLDCP%
+set CLASSPATH=classes;..\lib\methodtracer.jar;..\infobus.jar
+java -classic sun.beanbox.BeanBoxFrame
+set CLASSPATH=%OLDCP%
+set OLDCP=
+echo CLASSPATH restored to %CLASSPATH%
+</pre>
+</font>
+
+
+<!-- Section -->
+<a name="sectlevel3id044003002"></a>
+<h3>44.3.2 Grundlagen der Bedienung </h3>
+
+<p>
+Nach dem Aufruf des Startscripts <font color="#000077"><tt>run</tt></font>
+wird die Beanbox gestartet und präsentiert ihre aus vier Top-Level-Frames
+bestehende Arbeitsoberfläche:
+
+<!-- Section -->
+
+<a name="sectlevel4id044003002001"></a>
+<h4>Bedienelemente </h4>
+<p>
+<a name="imageid044002"></a>
+<img src="images/Beanbox1.gif">
+<p>
+
+<p><i>
+Abbildung 44.2: Die Beanbox</i></p>
+<ul>
+<li>Das linke Fenster zeigt die <i>Toolbox</i> an. Sie enthält
+eine Liste mit allen verfügbaren Beans.
+<li>Das mittlere Fenster stellt den GUI-Designer dar, in dem ausgewählte
+Beans platziert werden. Hier können die Beans verschoben, in
+der Größe verändert und zur Bearbeitung ausgewählt
+werden.
+<li>Das rechte obere Fenster enthält den <i>Property-Editor</i>,
+mit dessen Hilfe die Eigenschaften der ausgewählten Bean modifiziert
+werden können.
+<li>Der rechts unten angezeigte <i>Method Tracer</i> dient zur Unterstützung
+beim Debuggen und soll hier nicht weiter behandelt werden. Er kann
+mit dem Menüpunkt »Services.Hide_Method_Tracing« deaktiviert
+werden.
+</ul>
+
+
+<!-- Section -->
+<a name="sectlevel4id044003002002"></a>
+<h4>Einfügen und Modifizieren von Beans </h4>
+
+<p>
+Um eine Bean zu bearbeiten, muss sie zunächst im GUI-Designer
+platziert werden. Dazu ist sie in der Toolbox anzuklicken und mit
+einem erneuten Klick im GUI-Designer zu platzieren. Der schraffierte
+Rand zeigt an, dass sie ausgewählt wurde und ihre Eigenschaften
+im Property-Editor modifiziert werden können. Durch Ziehen an
+einem der vier Ränder kann die Bean beliebig verschoben werden.
+Ist ihre Größe variabel, kann sie durch Ziehen an einer
+der vier Ecken verändert werden. Soll eine Bean aus dem GUI-Designer
+entfernt werden, ist sie zu markieren und mit dem Menüpunkt »Edit.Cut«
+zu löschen.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Beachten Sie bitte, dass das Verschieben der Bean und das Ändern
+ihrer Größe ausschließlich durch Mausklicks <i>auf
+ihrem Rand</i> ausgeführt wird. Mausoperationen im Inneren der
+Bean werden als reguläre Ereignisse gewertet und direkt an das
+zu diesem Zeitpunkt bereits instanzierte Bean-Objekt weitergeleitet.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#0099CC">
+<tr>
+<td><font color="#FFFFFF"> Tipp </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+<p>
+Als Beispiel wollen wir die vordefinierte Bean »OrangeButton«
+im GUI-Designer platzieren. Sie stellt sich zunächst als oranges
+Rechteck dar, das nach einem Mausklick kurz die Farbe wechselt. Im
+Property-Editor können die öffentlichen Eigenschaften der
+Bean verändert werden:
+<ul>
+<li>»background« verändert die Hintergrundfarbe. Sie
+ist standardmäßig orange und kann durch Klick auf das farbige
+Panel verändert werden. Der angezeigte Farbauswahldialog ist
+allerdings etwas rudimentär und erlaubt lediglich die direkte
+Eingabe eines RGB-Werts oder die Auswahl einer vordefinierten Farbkonstante.
+<li>»foreground« verändert die Farbe, in der der Rahmen
+des Buttons gezeichnet wird. Hier kommt derselbe Farbdialog wie zuvor
+zum Einsatz.
+<li>Die Eigenschaft »label« definiert die Bezeichnung des
+Buttons. Wird der Wert in diesem Textfeld geändert, passt sich
+die Beschriftung des Buttons entsprechend an.
+<li>Schließlich kann mit der Eigenschaft »font« die
+Schriftart und -größe geändert werden, in der die
+Beschriftung des Buttons angezeigt wird. Auch hier wird der Änderungsdialog
+durch Klicken auf den angezeigten Wert aufgerufen und präsentiert
+sich ähnlich spartanisch wie der Farbdialog. Immerhin können
+die relevanten Font-Parameter verändert werden, und auch die
+Eigenschaftenanzeige verändert sich in Abhängigkeit von
+der Fontauswahl.
+</ul>
+
+
+<!-- Section -->
+<a name="sectlevel4id044003002003"></a>
+<h4>Events </h4>
+
+<p>
+Die Beanbox bietet die Möglichkeit, eine Bean über die von
+ihr generierten Events mit einer anderen Bean zu verbinden. Um das
+beispielhaft zu demonstrieren, soll zusätzlich eine Instanz der
+Bean vom Typ »EventMonitor« im GUI-Designer platziert werden.
+Dann klicken wir den Button an und rufen den Menüpunkt »edit.Events.buttonPushed.actionPerformed«
+auf. Wenn die Maus nun den Button verläßt, bleibt sie über
+eine rote Linie mit dem Button verbunden. Wir ziehen diese Linie auf
+den »EventMonitor« und führen einen weiteren Mausklick
+aus. In der nun angezeigten Liste aufrufbarer Methoden wählen
+wir den (einzigen) Eintrag <font color="#000077"><tt>initiateEventSourceMonitoring</tt></font>
+aus.
+
+<p>
+Die Beanbox generiert nun Java-Code für eine Adapterklasse, kompiliert
+ihn und legt die resultierenden Dateien im Unterverzeichnis <font color="#660099">tmp\sunw\beanbox</font>
+ab. Gleichzeitig registriert sie die Adapterklasse für das Action-Ereignis
+des Buttons und sorgt durch den Aufruf der ausgewählten Methode
+innerhalb von <a href="index_a.html#ixb101474"><font color=#000080><tt>actionPerformed</tt></font></a>
+dafür, dass der Event-Listener bei jedem Buttonklick benachrichtigt
+wird. Seine Aufgabe besteht darin, die ausgelösten Ereignisse
+zu speichern und in einer Listbox auf dem Bildschirm anzuzeigen.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Auf diese Weise lassen sich prinzipiell beliebige Beans miteinander
+verbinden. Die Einschränkung der Beanbox besteht lediglich darin,
+dass sie nur Adapterklassen für den Aufruf von parameterlosen
+Methoden erzeugen kann. Fortgeschrittenere GUI-Designer würden
+es erlauben, auch parametrisierte Methoden aufzurufen. Sie würden
+zusätzlich einen Editor zur Verfügung stellen, mit dem der
+erzeugte Code per Hand angepasst werden kann.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
+<tr>
+<td><font color="#FFFFFF"> Hinweis </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="integrationbeans"></a>
+<h3>44.3.3 Integration eigener Beans </h3>
+
+<p>
+Neben den vordefinierten können auch eigene Beans in die Beanbox
+integriert werden. Sie können dann wie vordefinierte verwendet,
+manipuliert und serialisiert werden. Im folgenden wollen wir beschreiben,
+welche Schritte nötig sind, um eine Bean in der Beanbox verwendbar
+zu machen. Für die Einbindung in eigene GUI-Designer kann eventuell
+eine etwas andere Vorgehensweise erforderlich sein. Dazu sollte die
+Bean-Dokumentation des jeweiligen Entwicklungssystems konsultiert
+werden.
+
+<!-- Section -->
+
+<a name="sectlevel4id044003003001"></a>
+<h4>Entwickeln und Übersetzen der Bean </h4>
+
+<p>
+Die ersten beiden Schritte, das Entwickeln und Übersetzen der
+Bean, haben wird schon erledigt. Sie unterscheiden sich in keiner
+Weise von der einer herkömmlichen Java-Klasse. Als Ergebnis ensteht
+eine Klasse <font color="#000077"><tt>LightBulb.class</tt></font>
+mit dem Bytecode der Glühlampen-Bean.
+
+<!-- Section -->
+
+<a name="sectlevel4id044003003002"></a>
+<h4>Erzeugen einer Manifest-Datei </h4>
+
+<p>
+Um bei GUI-Designern mit einer großen Anzahl unterschiedlicher
+Beans ein schwer zu durchschauendes Sammelsurium kleiner Klassendateien
+zu vermeiden, werden Beans in jar-Archive verpackt und so an den GUI-Designer
+übergeben. Eine jar-Datei darf beliebig viele Beans enthalten.
+Um dem GUI-Designer die Möglichkeit zu geben, Klassen für
+Beans von solchen mit reinen Hilfsfunktionen zu unterscheiden, wird
+dem jar-Archiv eine <a name="ixa103278"><i>Manifest-Datei</i></a>
+hinzugefügt, die ihren Inhalt beschreibt. Es handelt sich um
+eine normale Textdatei, die für jede enthaltene Bean einen Eintrag
+der folgenden Form enthält:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+Name: <i>BeanClassFile.class</i>
+Java-Bean: <i>True</i>
+</pre>
+</font>
+</td>
+</tr>
+</table>
+
+<p>
+Der erste Eintrag gibt den Klassennamen an. Der zweite besagt, dass
+es sich um eine Bean handelt (Manifest-Dateien können auch noch
+andere Informationen über die im Archiv gespeicherten Dateien
+enthalten). Die Informationen werden zweckmäßigerweise
+in eine Textdatei <font color="#660099">manifest.txt</font> geschrieben
+und beim Erzeugen der jar-Datei mit der Option »m« eingebunden.
+Zum Einbinden der Glühlampe muss diese Datei also folgenden Inhalt
+haben:
+<font color="#000077">
+<pre>
+Name: LightBulb.class
+Java-Bean: True
+</pre>
+</font>
+
+
+<!-- Section -->
+<a name="sectlevel4id044003003003"></a>
+<h4>Erzeugen des jar-Archivs </h4>
+
+<p>
+Nun kann das Kommando zum Erzeugen der jar-Datei abgesetzt werden
+(wir wollen sie <font color="#660099">hjp3beans.jar</font> nennen):
+<font color="#333300">
+<pre>
+jar cfm hjp3beans.jar manifest.txt LightBulb.class bulb*.gif
+</pre>
+</font>
+
+<p>
+Die Option »c« steht für »create« und besagt,
+dass eine neue jar-Datei angelegt werden soll. Das »f« steht
+für »file« und gibt an, dass als erstes Argument hinter
+den Kommandobuchstaben der Name der jar-Datei steht. Das »m«
+steht für »manifest« und besagt, dass als nächstes
+Argument der Name der Manifest-Datei folgt. Ganz zum Schluß
+stehen die Namen der einzubindenden Dateien. In diesem Fall sind das
+die Klassendatei und die zur Darstellung benötigten gif-Dateien
+<font color="#660099">bulb1.gif</font> und <font color="#660099">bulb2.gif</font>.
+
+<p>
+Die jar-Datei muss nun in das Unterverzeichnis <font color="#660099">jars</font>
+des BDK-Installationsverzeichnisses kopiert werden. Beim nächsten
+Start der Beanbox wird sie automatisch gefunden, analysiert, und die
+darin enthaltenen Beans werden im GUI-Designer zur Verfügung
+gestellt.
+
+<!-- Section -->
+
+<a name="sectlevel4id044003003004"></a>
+<h4>Verwenden der eigenen Bean </h4>
+
+<p>
+Unsere Glühlampe wird nun in der Toolbox angezeigt und kann wie
+jede andere Bean in den GUI-Designer übernommen werden. Im Eigenschaftenfenster
+werden ihre Eigenschaften angezeigt und können interaktiv verändert
+werden. Wird beispielsweise die Eigenschaft <font color="#000077"><tt>lightOn</tt></font>
+von <a href="index_f.html#ixb100234"><font color=#000080><tt>false</tt></font></a>
+auf <a href="index_t.html#ixb100233"><font color=#000080><tt>true</tt></font></a>
+gesetzt, ändert die Bean ihren Zustand und die Glühlampe
+leuchtet auf (siehe <a href="k100282.html#lightbulbinbeanbox">Abbildung 44.3</a>).
+Auch auf das Verändern der ererbten Eigenschaften (z.B. der Hintergrundfarbe)
+reagiert unsere neue Komponente erwartungsgemäß mit einer
+entsprechenden Änderung der grafischen Darstellung.
+<p>
+<a name="lightbulbinbeanbox"></a>
+<img src="images/Beanbox2.gif">
+<p>
+
+<p><i>
+Abbildung 44.3: Die Glühlampe in der BeanBox</i></p>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Die Definition der Klasse <font color="#000077"><tt>LightBulb</tt></font>
+in <a href="k100281.html#lightbulblisting">Listing 44.3</a> enthält
+eine Methode <font color="#000077"><tt>toggleLight</tt></font>, mit
+der der Zustand der Lampe umgeschaltet werden kann. Da ihr Name nicht
+den Design-Konventionen für getter- und setter-Methoden entspricht,
+ist sie im GUI-Designer der Beanbox nicht sichtbar. In <a href="k100285.html#beancustomization">Abschnitt 44.6</a>
+werden wir erläutern, wie man sie mit Hilfe einer <a href="index_b.html#ixb102422"><font color=#000080><tt>BeanInfo</tt></font></a>-Klasse
+dennoch sichtbar machen kann.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
+<tr>
+<td><font color="#FFFFFF"> Hinweis </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel3id044003004"></a>
+<h3>44.3.4 <a name="ixa103279">Serialisierte Beans</a></h3>
+
+
+<!-- Section -->
+<a name="sectlevel4id044003004001"></a>
+<h4>Serialisieren von Beans mit der Beanbox </h4>
+
+<p>
+Im vorigen Abschnitt wurde erwähnt, dass Beans serialisierbar
+sein müssen. Dadurch ist ein GUI-Designer in der Lage, eine zum
+Designzeitpunkt konfigurierte Bean dauerhaft zu speichern und sie
+anderen Programmen vorkonfiguriert zur Verfügung zu stellen.
+
+<p>
+Auch die Beanbox bietet eine einfache Möglichkeit, Beans zu serialisieren
+und auf der Festplatte zu speichern. Dazu ist die gewünschte
+Bean im GUI-Designer zu markieren und der Menüpunkt »File.SerializeComponent«
+aufzurufen. Nun ist ein Dateiname anzugeben, unter dem die konfigurierte
+Bean gespeichert werden soll.
+
+<p>
+Im folgenden wollen wir annehmen, dass die Glühlampen-Bean in
+der Beanbox so konfiguriert wurde, dass das Licht angeschaltet ist
+und sie unter dem Namen »lb1.ser« persistent gespeichert
+wurde.
+
+<!-- Section -->
+
+<a name="sectlevel4id044003004002"></a>
+<h4>Einbinden serialisierter Beans </h4>
+
+<p>
+Soll eine serialisierte und damit vorkonfigurierte Bean in einem Programm
+verwendet werden, muss sie vor dem Einbinden deserialisiert werden.
+Dazu wird ein <a href="index_o.html#ixb101038"><font color=#000080><tt>ObjectInputStream</tt></font></a>
+verwendet, der die Bean mit Hilfe eines <a href="index_f.html#ixb101034"><font color=#000080><tt>FileInputStream</tt></font></a>
+aus ihrer Datei liest. Anschließend kann das deserialisierte
+Objekt durch Aufruf von <a href="index_a.html#ixb100727"><font color=#000080><tt>add</tt></font></a>
+in gewohnter Weise in den Dialog eingebunden werden:
+<a name="listingid044005"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* Listing4405.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">import</font> java.awt.*;
+<font color="#555555">004 </font><font color="#0000AA">import</font> java.awt.event.*;
+<font color="#555555">005 </font><font color="#0000AA">import</font> java.io.*;
+<font color="#555555">006 </font>
+<font color="#555555">007 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing4405
+<font color="#555555">008 </font><font color="#0000AA">extends</font> Frame
+<font color="#555555">009 </font>{
+<font color="#555555">010 </font> <font color="#0000AA">public</font> Listing4405()
+<font color="#555555">011 </font> {
+<font color="#555555">012 </font> <font color="#006699">super</font>(<font color="#0000FF">"LighBulbTest"</font>);
+<font color="#555555">013 </font> setLayout(<font color="#0000AA">new</font> FlowLayout());
+<font color="#555555">014 </font> setBackground(Color.gray);
+<font color="#555555">015 </font> addWindowListener(
+<font color="#555555">016 </font> <font color="#0000AA">new</font> WindowAdapter() {
+<font color="#555555">017 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> windowClosing(WindowEvent event)
+<font color="#555555">018 </font> {
+<font color="#555555">019 </font> System.exit(0);
+<font color="#555555">020 </font> }
+<font color="#555555">021 </font> }
+<font color="#555555">022 </font> );
+<font color="#555555">023 </font> loadLightBulb();
+<font color="#555555">024 </font> }
+<font color="#555555">025 </font>
+<font color="#555555">026 </font> <font color="#0000AA">private</font> <font color="#006699">void</font> loadLightBulb()
+<font color="#555555">027 </font> {
+<font color="#555555">028 </font> <font color="#0000AA">try</font> {
+<font color="#555555">029 </font> ObjectInputStream is = <font color="#0000AA">new</font> ObjectInputStream(
+<font color="#555555">030 </font> <font color="#0000AA">new</font> FileInputStream(<font color="#0000FF">"lb1.ser"</font>));
+<font color="#555555">031 </font> LightBulb bulb = (LightBulb)is.readObject();
+<font color="#555555">032 </font> is.close();
+<font color="#555555">033 </font> add(bulb);
+<font color="#555555">034 </font> } <font color="#0000AA">catch</font> (ClassNotFoundException e) {
+<font color="#555555">035 </font> System.err.println(e.toString());
+<font color="#555555">036 </font> } <font color="#0000AA">catch</font> (IOException e) {
+<font color="#555555">037 </font> System.err.println(e.toString());
+<font color="#555555">038 </font> }
+<font color="#555555">039 </font> }
+<font color="#555555">040 </font>
+<font color="#555555">041 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">042 </font> {
+<font color="#555555">043 </font> Listing4405 frm = <font color="#0000AA">new</font> Listing4405();
+<font color="#555555">044 </font> frm.setLocation(100, 100);
+<font color="#555555">045 </font> frm.pack();
+<font color="#555555">046 </font> frm.setVisible(<font color="#006699">true</font>);
+<font color="#555555">047 </font> }
+<font color="#555555">048 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing4405.java"><font color="#000055" size=-1>Listing4405.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 44.5: Einbinden einer serialisierten Bean</i></p>
+
+<p>
+Wird das Programm gestartet, lädt es die Bean und zeigt sie mit
+angeschaltetem Licht:
+<p>
+<a name="imageid044004"></a>
+<img src="images/BulbTest2.gif">
+<p>
+
+<p><i>
+Abbildung 44.4: Die deserialisierte Glühlampen-Bean</i></p>
+<hr>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
+Wesley, Version 5.0.1
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100279.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100281.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100283.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100287.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">© 1998, 2007 Guido Krüger & Thomas
+Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
+</table>
+<a name="endofbody"></a>
+</body>
+</html>
|
