summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100282.html
diff options
context:
space:
mode:
authorSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
committerSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
commit33613a85afc4b1481367fbe92a17ee59c240250b (patch)
tree670b842326116b376b505ec2263878912fca97e2 /Master/Reference Architectures and Patterns/hjp5/html/k100282.html
downloadStudium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz
Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2
add new repoHEADmaster
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100282.html')
-rw-r--r--Master/Reference Architectures and Patterns/hjp5/html/k100282.html618
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">&nbsp;Titel&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100279.html">&nbsp;&lt;&lt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100281.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100283.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100287.html">&nbsp;&gt;&gt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</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&uuml;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 &Uuml;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&uuml;tzung beim Entwurf und Testen von Beans und als Referenzplattform
+f&uuml;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&uuml;gung gestellt und kann beispielsweise
+&uuml;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&auml;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&uuml;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&uuml;r Java-Beans betrachtet werden. Dazu ist sie zu schwach. Sie
+wurde lediglich entwickelt, um die Bean-Konzepte zu illustrieren und
+eine erste M&ouml;glichkeit f&uuml;r ihre Anwendung zur Verf&uuml;gung
+zu stellen. Bei weitergehendem Einsatz st&ouml;&szlig;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">&nbsp;Warnung&nbsp;</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&uuml;gesteuertes Installationsprogramm
+&#187;bdk1_1-win.exe&#171;, das die meisten Schritte &uuml;bernimmt.
+Nachdem es gestartet wurde, m&uuml;ssen zun&auml;chst die Lizenzbedingungen
+akzeptiert werden, dann ist die Eingabe des Installationsverzeichnisses
+erforderlich. Sind mehrere Java-Interpreter vorhanden, muss anschlie&szlig;end
+ausgew&auml;hlt werden, welcher von ihnen zum Betrieb des BDK verwendet
+werden soll. Nach Dr&uuml;cken des &#187;Install&#171;-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&ouml;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> &uuml;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&ouml;nnte etwa so aussehen (analoge Anpassungen k&ouml;nnen f&uuml;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&auml;sentiert ihre aus vier Top-Level-Frames
+bestehende Arbeitsoberfl&auml;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&auml;lt
+eine Liste mit allen verf&uuml;gbaren Beans.
+<li>Das mittlere Fenster stellt den GUI-Designer dar, in dem ausgew&auml;hlte
+Beans platziert werden. Hier k&ouml;nnen die Beans verschoben, in
+der Gr&ouml;&szlig;e ver&auml;ndert und zur Bearbeitung ausgew&auml;hlt
+werden.
+<li>Das rechte obere Fenster enth&auml;lt den <i>Property-Editor</i>,
+mit dessen Hilfe die Eigenschaften der ausgew&auml;hlten Bean modifiziert
+werden k&ouml;nnen.
+<li>Der rechts unten angezeigte <i>Method Tracer</i> dient zur Unterst&uuml;tzung
+beim Debuggen und soll hier nicht weiter behandelt werden. Er kann
+mit dem Men&uuml;punkt &#187;Services.Hide_Method_Tracing&#171; deaktiviert
+werden.
+</ul>
+
+
+<!-- Section -->
+<a name="sectlevel4id044003002002"></a>
+<h4>Einf&uuml;gen und Modifizieren von Beans </h4>
+
+<p>
+Um eine Bean zu bearbeiten, muss sie zun&auml;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&auml;hlt wurde und ihre Eigenschaften
+im Property-Editor modifiziert werden k&ouml;nnen. Durch Ziehen an
+einem der vier R&auml;nder kann die Bean beliebig verschoben werden.
+Ist ihre Gr&ouml;&szlig;e variabel, kann sie durch Ziehen an einer
+der vier Ecken ver&auml;ndert werden. Soll eine Bean aus dem GUI-Designer
+entfernt werden, ist sie zu markieren und mit dem Men&uuml;punkt &#187;Edit.Cut&#171;
+zu l&ouml;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 &Auml;ndern
+ihrer Gr&ouml;&szlig;e ausschlie&szlig;lich durch Mausklicks <i>auf
+ihrem Rand</i> ausgef&uuml;hrt wird. Mausoperationen im Inneren der
+Bean werden als regul&auml;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">&nbsp;Tipp&nbsp;</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 &#187;OrangeButton&#171;
+im GUI-Designer platzieren. Sie stellt sich zun&auml;chst als oranges
+Rechteck dar, das nach einem Mausklick kurz die Farbe wechselt. Im
+Property-Editor k&ouml;nnen die &ouml;ffentlichen Eigenschaften der
+Bean ver&auml;ndert werden:
+<ul>
+<li>&#187;background&#171; ver&auml;ndert die Hintergrundfarbe. Sie
+ist standardm&auml;&szlig;ig orange und kann durch Klick auf das farbige
+Panel ver&auml;ndert werden. Der angezeigte Farbauswahldialog ist
+allerdings etwas rudiment&auml;r und erlaubt lediglich die direkte
+Eingabe eines RGB-Werts oder die Auswahl einer vordefinierten Farbkonstante.
+<li>&#187;foreground&#171; ver&auml;ndert die Farbe, in der der Rahmen
+des Buttons gezeichnet wird. Hier kommt derselbe Farbdialog wie zuvor
+zum Einsatz.
+<li>Die Eigenschaft &#187;label&#171; definiert die Bezeichnung des
+Buttons. Wird der Wert in diesem Textfeld ge&auml;ndert, passt sich
+die Beschriftung des Buttons entsprechend an.
+<li>Schlie&szlig;lich kann mit der Eigenschaft &#187;font&#171; die
+Schriftart und -gr&ouml;&szlig;e ge&auml;ndert werden, in der die
+Beschriftung des Buttons angezeigt wird. Auch hier wird der &Auml;nderungsdialog
+durch Klicken auf den angezeigten Wert aufgerufen und pr&auml;sentiert
+sich &auml;hnlich spartanisch wie der Farbdialog. Immerhin k&ouml;nnen
+die relevanten Font-Parameter ver&auml;ndert werden, und auch die
+Eigenschaftenanzeige ver&auml;ndert sich in Abh&auml;ngigkeit von
+der Fontauswahl.
+</ul>
+
+
+<!-- Section -->
+<a name="sectlevel4id044003002003"></a>
+<h4>Events </h4>
+
+<p>
+Die Beanbox bietet die M&ouml;glichkeit, eine Bean &uuml;ber die von
+ihr generierten Events mit einer anderen Bean zu verbinden. Um das
+beispielhaft zu demonstrieren, soll zus&auml;tzlich eine Instanz der
+Bean vom Typ &#187;EventMonitor&#171; im GUI-Designer platziert werden.
+Dann klicken wir den Button an und rufen den Men&uuml;punkt &#187;edit.Events.buttonPushed.actionPerformed&#171;
+auf. Wenn die Maus nun den Button verl&auml;&szlig;t, bleibt sie &uuml;ber
+eine rote Linie mit dem Button verbunden. Wir ziehen diese Linie auf
+den &#187;EventMonitor&#171; und f&uuml;hren einen weiteren Mausklick
+aus. In der nun angezeigten Liste aufrufbarer Methoden w&auml;hlen
+wir den (einzigen) Eintrag <font color="#000077"><tt>initiateEventSourceMonitoring</tt></font>
+aus.
+
+<p>
+Die Beanbox generiert nun Java-Code f&uuml;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&uuml;r das Action-Ereignis
+des Buttons und sorgt durch den Aufruf der ausgew&auml;hlten Methode
+innerhalb von <a href="index_a.html#ixb101474"><font color=#000080><tt>actionPerformed</tt></font></a>
+daf&uuml;r, dass der Event-Listener bei jedem Buttonklick benachrichtigt
+wird. Seine Aufgabe besteht darin, die ausgel&ouml;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&auml;nkung der Beanbox besteht lediglich darin,
+dass sie nur Adapterklassen f&uuml;r den Aufruf von parameterlosen
+Methoden erzeugen kann. Fortgeschrittenere GUI-Designer w&uuml;rden
+es erlauben, auch parametrisierte Methoden aufzurufen. Sie w&uuml;rden
+zus&auml;tzlich einen Editor zur Verf&uuml;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">&nbsp;Hinweis&nbsp;</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&ouml;nnen auch eigene Beans in die Beanbox
+integriert werden. Sie k&ouml;nnen dann wie vordefinierte verwendet,
+manipuliert und serialisiert werden. Im folgenden wollen wir beschreiben,
+welche Schritte n&ouml;tig sind, um eine Bean in der Beanbox verwendbar
+zu machen. F&uuml;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 &Uuml;bersetzen der Bean </h4>
+
+<p>
+Die ersten beiden Schritte, das Entwickeln und &Uuml;bersetzen der
+Bean, haben wird schon erledigt. Sie unterscheiden sich in keiner
+Weise von der einer herk&ouml;mmlichen Java-Klasse. Als Ergebnis ensteht
+eine Klasse <font color="#000077"><tt>LightBulb.class</tt></font>
+mit dem Bytecode der Gl&uuml;hlampen-Bean.
+
+<!-- Section -->
+
+<a name="sectlevel4id044003003002"></a>
+<h4>Erzeugen einer Manifest-Datei </h4>
+
+<p>
+Um bei GUI-Designern mit einer gro&szlig;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
+&uuml;bergeben. Eine jar-Datei darf beliebig viele Beans enthalten.
+Um dem GUI-Designer die M&ouml;glichkeit zu geben, Klassen f&uuml;r
+Beans von solchen mit reinen Hilfsfunktionen zu unterscheiden, wird
+dem jar-Archiv eine <a name="ixa103278"><i>Manifest-Datei</i></a>
+hinzugef&uuml;gt, die ihren Inhalt beschreibt. Es handelt sich um
+eine normale Textdatei, die f&uuml;r jede enthaltene Bean einen Eintrag
+der folgenden Form enth&auml;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&ouml;nnen auch noch
+andere Informationen &uuml;ber die im Archiv gespeicherten Dateien
+enthalten). Die Informationen werden zweckm&auml;&szlig;igerweise
+in eine Textdatei <font color="#660099">manifest.txt</font> geschrieben
+und beim Erzeugen der jar-Datei mit der Option &#187;m&#171; eingebunden.
+Zum Einbinden der Gl&uuml;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 &#187;c&#171; steht f&uuml;r &#187;create&#171; und besagt,
+dass eine neue jar-Datei angelegt werden soll. Das &#187;f&#171; steht
+f&uuml;r &#187;file&#171; und gibt an, dass als erstes Argument hinter
+den Kommandobuchstaben der Name der jar-Datei steht. Das &#187;m&#171;
+steht f&uuml;r &#187;manifest&#171; und besagt, dass als n&auml;chstes
+Argument der Name der Manifest-Datei folgt. Ganz zum Schlu&szlig;
+stehen die Namen der einzubindenden Dateien. In diesem Fall sind das
+die Klassendatei und die zur Darstellung ben&ouml;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&auml;chsten
+Start der Beanbox wird sie automatisch gefunden, analysiert, und die
+darin enthaltenen Beans werden im GUI-Designer zur Verf&uuml;gung
+gestellt.
+
+<!-- Section -->
+
+<a name="sectlevel4id044003003004"></a>
+<h4>Verwenden der eigenen Bean </h4>
+
+<p>
+Unsere Gl&uuml;hlampe wird nun in der Toolbox angezeigt und kann wie
+jede andere Bean in den GUI-Designer &uuml;bernommen werden. Im Eigenschaftenfenster
+werden ihre Eigenschaften angezeigt und k&ouml;nnen interaktiv ver&auml;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, &auml;ndert die Bean ihren Zustand und die Gl&uuml;hlampe
+leuchtet auf (siehe <a href="k100282.html#lightbulbinbeanbox">Abbildung 44.3</a>).
+Auch auf das Ver&auml;ndern der ererbten Eigenschaften (z.B. der Hintergrundfarbe)
+reagiert unsere neue Komponente erwartungsgem&auml;&szlig; mit einer
+entsprechenden &Auml;nderung der grafischen Darstellung.
+<p>
+<a name="lightbulbinbeanbox"></a>
+<img src="images/Beanbox2.gif">
+<p>
+
+<p><i>
+Abbildung 44.3: Die Gl&uuml;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&auml;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&uuml;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&auml;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">&nbsp;Hinweis&nbsp;</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&auml;hnt, dass Beans serialisierbar
+sein m&uuml;ssen. Dadurch ist ein GUI-Designer in der Lage, eine zum
+Designzeitpunkt konfigurierte Bean dauerhaft zu speichern und sie
+anderen Programmen vorkonfiguriert zur Verf&uuml;gung zu stellen.
+
+<p>
+Auch die Beanbox bietet eine einfache M&ouml;glichkeit, Beans zu serialisieren
+und auf der Festplatte zu speichern. Dazu ist die gew&uuml;nschte
+Bean im GUI-Designer zu markieren und der Men&uuml;punkt &#187;File.SerializeComponent&#171;
+aufzurufen. Nun ist ein Dateiname anzugeben, unter dem die konfigurierte
+Bean gespeichert werden soll.
+
+<p>
+Im folgenden wollen wir annehmen, dass die Gl&uuml;hlampen-Bean in
+der Beanbox so konfiguriert wurde, dass das Licht angeschaltet ist
+und sie unter dem Namen &#187;lb1.ser&#171; 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&szlig;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&auml;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&uuml;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">&nbsp;Titel&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</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">&nbsp;&lt;&lt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100281.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100283.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100287.html">&nbsp;&gt;&gt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
+<td align="right">&copy; 1998, 2007 Guido Kr&uuml;ger &amp; Thomas
+Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
+</table>
+<a name="endofbody"></a>
+</body>
+</html>