1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
|
<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,k100248.html;106,k100248.html;107,k100250.html;108,k100254.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="k100248.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100248.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100250.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100254.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 39 - Applets I
</table>
<hr>
<!-- Section -->
<a name="sectlevel2id039001"></a>
<h2>39.1 Die Architektur eines Applets </h2>
<hr>
<ul>
<li><a href="k100249.html#sectlevel2id039001">39.1 Die Architektur eines Applets</a>
<ul>
<li><a href="k100249.html#sectlevel3id039001001">39.1.1 Grundlagen</a>
<li><a href="k100249.html#sectlevel3id039001002">39.1.2 Die Klasse java.applet.Applet</a>
<li><a href="k100249.html#sectlevel3id039001003">39.1.3 Initialisierung und Endebehandlung</a>
<ul>
<li><a href="k100249.html#sectlevel4id039001003001">Instanzierung des Applets</a>
<li><a href="k100249.html#sectlevel4id039001003002">Initialisierung des Applets</a>
<li><a href="k100249.html#sectlevel4id039001003003">Starten des Applets</a>
<li><a href="k100249.html#sectlevel4id039001003004">Stoppen des Applets</a>
<li><a href="k100249.html#sectlevel4id039001003005">Zerstören des Applets</a>
</ul>
<li><a href="k100249.html#sectlevel3id039001004">39.1.4 Weitere Methoden der Klasse Applet</a>
<ul>
<li><a href="k100249.html#sectlevel4id039001004001">Methoden zum Nachrichtentransfer</a>
<li><a href="k100249.html#sectlevel4id039001004002">showStatus</a>
<li><a href="k100249.html#sectlevel4id039001004003">getParameterInfo</a>
<li><a href="k100249.html#sectlevel4id039001004004">getAppletInfo</a>
</ul>
</ul>
</ul>
<hr>
<!-- Section -->
<a name="sectlevel3id039001001"></a>
<h3>39.1.1 Grundlagen </h3>
<p>
Für viele Leser, die Java lernen wollen, steht die Entwicklung
von Applets im Vordergrund und ist der Hauptgrund für die Beschäftigung
mit der Sprache. In letzter Zeit ist allerdings ein Trend zu beobachten,
bei dem Java zunehmend auch als Sprache für die Anwendungsentwicklung
an Bedeutung gewinnt. Daß man mit Java auch Web-Pages verschönern
kann, ist dabei ein angenehmer Nebeneffekt.
<p>
Tatsächlich unterscheiden sich Applets und Applikationen gar
nicht so stark voneinander, wie man vermuten könnte. Bis auf
wenige Ausnahmen werden sie mit denselben Werkzeugen und Techniken
konstruiert. Vereinfacht kann man sagen, dass Java-Applikationen eigenständige
Programme sind, die zur Ausführung den Stand-Alone-Java-Interpreter
benötigen, während Java-Applets aus HTML-Seiten heraus aufgerufen
werden und zur Ausführung einen Web-Browser benötigen.
<p>
Die wichtigsten Unterschiede kann man in einer kurzen Liste zusammenfassen:
<ul>
<li>Das Hauptprogramm eines Applets wird immer aus der Klasse <a name="ixa102887"><a href="index_a.html#ixb100588"><font color=#000080><tt>Applet</tt></font></a></a>
abgeleitet. Bei einer Applikation ist es prinzipiell gleichgültig,
woraus die Hauptklasse abgeleitet wird.
<li>Eine Applikation wird gestartet, indem vom Java-Interpreter die
Klassenmethode <a name="ixa102888"><a href="index_m.html#ixb100150"><font color=#000080><tt>main</tt></font></a></a>
aufgerufen wird. Das Starten eines Applets wird dadurch erreicht,
dass der Web-Browser die Applet-Klasse instanziert und die Methoden
<a name="ixa102889"><a href="index_i.html#ixb101815"><font color=#000080><tt>init</tt></font></a></a>
und <a name="ixa102890"><a href="index_s.html#ixb101110"><font color=#000080><tt>start</tt></font></a></a>
aufruft.
<li>Aus Sicherheitsgründen darf ein Applet in der Regel weder
auf Dateien des lokalen Rechners zugreifen noch externe Programme
auf diesem starten. Eine Ausnahme bilden <a name="ixa102891"><i>signierte Applets</i></a>.
Für eine Applikation gelten diese Beschränkungen nicht.
<li>Ein Applet arbeitet immer grafik- und ereignisorientiert. Bei
einer Applikation dagegen ist es möglich, auf die Verwendung
des AWT zu verzichten und alle Ein-/Ausgaben textorientiert zu erledigen.
<li>Applets bieten einige zusätzliche Möglichkeiten im Bereich
des Benutzerschnittstellen-Designs, die so bei Applikationen nicht
ohne weiteres zu finden sind. Die Ausgabe von Sound beispielsweise
ist standardmäßig auf Applets beschränkt.
</ul>
<p>
Dieses Kapitel erklärt die Grundlagen der Applet-Programmierung
und erläutert die Einbindung von Applets in HTML-Dokumente. Es
baut dabei auf vielen der in den Kapiteln <a href="k100150.html#kapitelgrafikausgabe">23</a>
bis <a href="k100224.html#kapitelbitmapsanimationen">34</a> des Buches
vermittelten AWT-Features auf, ohne deren Kenntnis die Applet-Programmierung
kaum möglich wäre.
<!-- Section -->
<a name="sectlevel3id039001002"></a>
<h3>39.1.2 Die Klasse java.applet.Applet </h3>
<p>
Wie schon erwähnt, wird das Hauptprogramm eines Applets aus der
Klasse <a href="index_a.html#ixb100588"><font color=#000080><tt>Applet</tt></font></a>
des Pakets <a href="index_j.html#ixb100593"><font color=#000080><tt>java.applet</tt></font></a>
abgeleitet. <a href="index_a.html#ixb100588"><font color=#000080><tt>Applet</tt></font></a>
ist nun aber keine der abstrakten Basisklassen der Java-Klassenbibliothek,
wie man es vielleicht erwarten würde, sondern eine konkrete Grafikklasse
am Ende der Klassenhierarchie. <a href="index_a.html#ixb100588"><font color=#000080><tt>Applet</tt></font></a>
ist aus der Klasse <a href="index_p.html#ixb101354"><font color=#000080><tt>Panel</tt></font></a>
abgeleitet, diese aus <a href="index_c.html#ixb101353"><font color=#000080><tt>Container</tt></font></a>
und <a href="index_c.html#ixb101353"><font color=#000080><tt>Container</tt></font></a>
aus <a href="index_c.html#ixb101302"><font color=#000080><tt>Component</tt></font></a>.
<a href="k100249.html#appletableitung">Abbildung 39.1</a> stellt die
Ableitungshierarchie schematisch dar:
<p>
<a name="appletableitung"></a>
<img src="images/VererbApplet.gif">
<p>
<p><i>
Abbildung 39.1: Ableitungsbaum der Applet-Klasse</i></p>
<p>
Ein Applet ist also ein rechteckiges Bildschirmelement, das eine Größe
und Position hat, Ereignisse empfangen kann und in der Lage ist, grafische
Ausgaben vorzunehmen. Tatsächlich kommt dies dem Anspruch eines
Applets, ein eigenständiges Programm zu sein, das innerhalb eines
fensterartigen Ausschnitts in einem grafikfähigen Web-Browser
läuft, sehr entgegen. Durch die Vererbungshierarchie erbt ein
Applet bereits von seinen Vaterklassen einen großen Teil der
Fähigkeiten, die es zur Ausführung benötigt. Die über
die Fähigkeiten von <a href="index_c.html#ixb101353"><font color=#000080><tt>Container</tt></font></a>,
<a href="index_c.html#ixb101302"><font color=#000080><tt>Component</tt></font></a>
und <a href="index_p.html#ixb101354"><font color=#000080><tt>Panel</tt></font></a>
hinaus erforderliche Funktionalität, die benötigt wird,
um ein Objekt der Klasse <a href="index_a.html#ixb100588"><font color=#000080><tt>Applet</tt></font></a>
als Hauptmodul eines eigenständigen Programms laufen zu lassen,
wird von der Klasse <a href="index_a.html#ixb100588"><font color=#000080><tt>Applet</tt></font></a>
selbst zur Verfügung gestellt.
<!-- Section -->
<a name="sectlevel3id039001003"></a>
<h3>39.1.3 Initialisierung und Endebehandlung </h3>
<p>
Die Kommunikation zwischen einem Applet und seinem Browser läuft
auf verschiedenen Ebenen ab. Nach dem Laden wird das Applet zunächst
<i>instanziert</i> und dann <i>initialisiert</i>. Anschließend
wird es gestartet, erhält GUI-Events und wird irgendwann wieder
gestoppt. Schließlich wird das Applet vom Browser nicht mehr
benötigt und zerstört.
<p>
Zu jedem dieser Schritte gibt es eine korrespondierende Methode, die
vor dem entsprechenden Statuswechsel aufgerufen wird. Die aus <a href="index_a.html#ixb100588"><font color=#000080><tt>Applet</tt></font></a>
abgeleitete Klasse ist dafür verantwortlich, diese Methoden zu
überlagern und mit der erforderlichen Funktionalität auszustatten.
<!-- Section -->
<a name="sectlevel4id039001003001"></a>
<h4>Instanzierung des Applets </h4>
<p>
Bevor ein Applet aktiv werden kann, muss der Browser zunächst
ein Objekt der abgeleiteten <a href="index_a.html#ixb100588"><font color=#000080><tt>Applet</tt></font></a>-Klasse
instanzieren. Hierzu ruft er den parameterlosen Default-Konstruktor
der Klasse auf:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public Applet()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/applet/Applet.html" onClick="this.href=getApiDoc('java.applet.Applet')"><font color="#660066" size=-1>java.applet.Applet</font></a></td>
</tr>
</table>
<p>
Üblicherweise wird dieser in der abgeleiteten Klasse nicht überlagert,
sondern von <a href="index_a.html#ixb100588"><font color=#000080><tt>Applet</tt></font></a>
geerbt. Notwendige Initialisierungen von Membervariablen werden später
erledigt.
<!-- Section -->
<a name="sectlevel4id039001003002"></a>
<h4>Initialisierung des Applets<a name="ixa102892"></a> </h4>
<p>
Nach der Instanzierung ruft der Browser die Methode <a name="ixa102893"><a href="index_i.html#ixb101815"><font color=#000080><tt>init</tt></font></a></a>
auf, um dem Applet die Möglichkeit zu geben, Initialisierungen
vorzunehmen:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public void init()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/applet/Applet.html" onClick="this.href=getApiDoc('java.applet.Applet')"><font color="#660066" size=-1>java.applet.Applet</font></a></td>
</tr>
</table>
<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>
<a href="index_i.html#ixb101815"><font color=#000080><tt>init</tt></font></a>
wird während der Lebensdauer eines Applets <i>genau einmal</i>
aufgerufen, nachdem die Klassendatei geladen und das Applet instanziert
wurde. Innerhalb von <a href="index_i.html#ixb101815"><font color=#000080><tt>init</tt></font></a>
können Membervariablen initialisiert, Images oder Fonts geladen
oder Parameter ausgewertet werden.</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="sectlevel4id039001003003"></a>
<h4>Starten des Applets<a name="ixa102894"></a> </h4>
<p>
Nachdem die Initialisierung abgeschlossen ist, wird die Methode <a name="ixa102895"><a href="index_s.html#ixb101110"><font color=#000080><tt>start</tt></font></a></a>
aufgerufen, um die Ausführung des Applets zu starten:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public void start()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/applet/Applet.html" onClick="this.href=getApiDoc('java.applet.Applet')"><font color="#660066" size=-1>java.applet.Applet</font></a></td>
</tr>
</table>
<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>
Im Gegensatz zur Initialisierung kann das Starten eines Applets mehrfach
erfolgen. Wenn der Browser eine andere Webseite lädt, wird das
Applet nicht komplett zerstört, sondern lediglich gestoppt (siehe
nächsten Abschnitt). Bei erneutem Aufruf der Seite wird es dann
wieder gestartet und die Methode <a href="index_s.html#ixb101110"><font color=#000080><tt>start</tt></font></a>
erneut aufgerufen.</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="sectlevel4id039001003004"></a>
<h4>Stoppen des Applets<a name="ixa102896"></a> </h4>
<p>
Durch Aufrufen der Methode <a name="ixa102897"><a href="index_s.html#ixb101115"><font color=#000080><tt>stop</tt></font></a></a>
zeigt der Browser dem Applet an, dass es gestoppt werden soll:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public void stop()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/applet/Applet.html" onClick="this.href=getApiDoc('java.applet.Applet')"><font color="#660066" size=-1>java.applet.Applet</font></a></td>
</tr>
</table>
<p>
Wie erwähnt, geschieht dies immer dann, wenn eine andere Seite
geladen wird. Während der Lebensdauer eines Applets können
die Methoden <a href="index_s.html#ixb101110"><font color=#000080><tt>start</tt></font></a>
und <a href="index_s.html#ixb101115"><font color=#000080><tt>stop</tt></font></a>
also mehrfach aufgerufen werden. Keinesfalls darf ein Applet also
innerhalb von <a href="index_s.html#ixb101115"><font color=#000080><tt>stop</tt></font></a>
irgendwelche endgültigen Aufräumarbeiten durchführen
und Ressourcen entfernen, die es bei einem nachträglichen Neustart
wieder benötigen würde.
<!-- Section -->
<a name="sectlevel4id039001003005"></a>
<h4>Zerstören des Applets<a name="ixa102898"></a> </h4>
<p>
Wenn ein Applet ganz bestimmt nicht mehr gebraucht wird (z.B. weil
der Browser beendet wird), ruft der Browser die Methode <a name="ixa102899"><a href="index_d.html#ixb100866"><font color=#000080><tt>destroy</tt></font></a></a>
auf:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public void destroy()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/applet/Applet.html" onClick="this.href=getApiDoc('java.applet.Applet')"><font color="#660066" size=-1>java.applet.Applet</font></a></td>
</tr>
</table>
<p>
Diese kann überlagert werden, um Aufräumarbeiten zu erledigen,
die erforderlich sind, wenn das Applet nicht mehr verwendet wird.
Eine typische Anwendung von <a href="index_d.html#ixb100866"><font color=#000080><tt>destroy</tt></font></a>
besteht beispielsweise darin, einen Thread zu zerstören, der
bei der Initialisierung eines Applets angelegt wurde.
<!-- Section -->
<a name="sectlevel3id039001004"></a>
<h3>39.1.4 Weitere Methoden der Klasse Applet </h3>
<!-- Section -->
<a name="sectlevel4id039001004001"></a>
<h4>Methoden zum Nachrichtentransfer </h4>
<p>
Neben diesen vier speziellen Methoden kann ein Applet alle Nachrichten
erhalten, die an ein <a href="index_c.html#ixb101302"><font color=#000080><tt>Component</tt></font></a>-Objekt
versendet werden. Hierzu zählen Mouse-, MouseMotion-, Key-, Focus-
und Component-Events ebenso wie die Aufforderung an das Applet, seine
Client-Area neu zu zeichnen. Bezüglich Reaktion auf die Events
und die Registrierung und Programmierung geeigneter Listener-Klassen
verhält sich ein Applet genauso wie jedes andere Fenster. In
<a href="k100180.html#kapiteleventhandling">Kapitel 28</a> und <a href="k100184.html#kapitellowlevelevents">Kapitel 29</a>
wurden die möglichen Ereignisse und die Reaktion des Programms
darauf vorgestellt.
<!-- Section -->
<a name="sectlevel4id039001004002"></a>
<h4>showStatus </h4>
<p>
Mit der Methode <a name="ixa102900"><a href="index_s.html#ixb102144"><font color=#000080><tt>showStatus</tt></font></a></a>
kann das Applet einen Text in die <a name="ixa102901">Statuszeile des HTML-Browsers</a>
schreiben, der das Applet ausführt:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public void showStatus(String msg)
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/applet/Applet.html" onClick="this.href=getApiDoc('java.applet.Applet')"><font color="#660066" size=-1>java.applet.Applet</font></a></td>
</tr>
</table>
<p>
Das folgende Beispiel zeigt ein sehr einfaches Applet, das den Text
»Hello, world« auf dem Bildschirm ausgibt und in die Statuszeile
des Browsers schreibt:
<a name="listingid039001"></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">/* Listing3901.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.applet.*;
<font color="#555555">005 </font>
<font color="#555555">006 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing3901
<font color="#555555">007 </font><font color="#0000AA">extends</font> Applet
<font color="#555555">008 </font>{
<font color="#555555">009 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> paint(Graphics g)
<font color="#555555">010 </font> {
<font color="#555555">011 </font> showStatus(<font color="#0000FF">"Hello, world"</font>);
<font color="#555555">012 </font> g.drawString(<font color="#0000FF">"Hello, world"</font>,10,50);
<font color="#555555">013 </font> }
<font color="#555555">014 </font>}</pre>
</font>
</td>
<td valign=top align=right>
<a href="../examples/Listing3901.java"><font color="#000055" size=-1>Listing3901.java</font></a></td>
</tr>
</table>
<i>
Listing 39.1: Ein einfaches Applet</i></p>
<!-- Section -->
<a name="sectlevel4id039001004003"></a>
<h4>getParameterInfo </h4>
<p>
Die Klasse <a href="index_a.html#ixb100588"><font color=#000080><tt>Applet</tt></font></a>
besitzt eine Methode <a name="ixa102902"><a href="index_g.html#ixb102146"><font color=#000080><tt>getParameterInfo</tt></font></a></a>,
die in abgeleiteten Klassen überlagert werden sollte:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public String[][] getParameterInfo()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/applet/Applet.html" onClick="this.href=getApiDoc('java.applet.Applet')"><font color="#660066" size=-1>java.applet.Applet</font></a></td>
</tr>
</table>
<p>
<a href="index_g.html#ixb102146"><font color=#000080><tt>getParameterInfo</tt></font></a>
kann vom Browser aufgerufen werden, um Informationen über die
vom Applet akzeptierten Parameter zu erhalten. Der Rückgabewert
von <a href="index_g.html#ixb102146"><font color=#000080><tt>getParameterInfo</tt></font></a>
ist ein zweidimensionales Array von Strings. Jedes Element des Arrays
beschreibt einen Parameter des Applets durch ein Subarray mit drei
Elementen. Das erste Element gibt den Namen des Parameters an, das
zweite seinen Typ und das dritte eine textuelle Beschreibung des Parameters.
Die Informationen sollten so gestaltet sein, dass sie für <i>menschliche</i>
Benutzer verständlich sind; eine programmgesteuerte Verwendung
ist eigentlich nicht vorgesehen.
<p>
Das nachfolgende Listing zeigt eine beispielhafte Implementierung
der Methode <a href="index_g.html#ixb102146"><font color=#000080><tt>getParameterInfo</tt></font></a>
für das Applet in <a href="k100250.html#rotweisseschranke">Listing 39.5</a>:
<p>
<a name="listingid039002"></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="#0000AA">public</font> String[][] getParameterInfo()
<font color="#555555">002 </font>{
<font color="#555555">003 </font> String[][] ret = {
<font color="#555555">004 </font> {<font color="#0000FF">"redwidth"</font>,<font color="#0000FF">"int"</font>,<font color="#0000FF">"Breite eines roten Segments"</font>},
<font color="#555555">005 </font> {<font color="#0000FF">"whitewidth"</font>,<font color="#0000FF">"int"</font>,<font color="#0000FF">"Breite eines weissen Segments"</font>}
<font color="#555555">006 </font> };
<font color="#555555">007 </font> <font color="#0000AA">return</font> ret;
<font color="#555555">008 </font>}</pre>
</font>
</td>
</tr>
</table>
<i>
Listing 39.2: Verwendung von getParameterInfo</i></p>
<!-- Section -->
<a name="sectlevel4id039001004004"></a>
<h4>getAppletInfo </h4>
<p>
Ähnlich der Methode <a href="index_g.html#ixb102146"><font color=#000080><tt>getParameterInfo</tt></font></a>
gibt es eine Methode <a name="ixa102903"><a href="index_g.html#ixb102147"><font color=#000080><tt>getAppletInfo</tt></font></a></a>,
mit der die Anwendung Informationen über das Applet zur Verfügung
stellen sollte:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public String getAppletInfo()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/applet/Applet.html" onClick="this.href=getApiDoc('java.applet.Applet')"><font color="#660066" size=-1>java.applet.Applet</font></a></td>
</tr>
</table>
<p>
Die Sprachspezifikation gibt an, dass hier ein String zurückgegeben
werden sollte, der Angaben zum Applet selbst, zur aktuellen Version
und zum Autor des Applets macht. Eine beispielhafte Implementierung
könnte so aussehen:
<a name="listingid039003"></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="#0000AA">public</font> String getAppletInfo()
<font color="#555555">002 </font>{
<font color="#555555">003 </font> <font color="#0000AA">return</font> <font color="#0000FF">"AppletBeispiel Ver. 1.0 (C) 1997-99 Guido Krueger"</font>;
<font color="#555555">004 </font>}</pre>
</font>
</td>
</tr>
</table>
<i>
Listing 39.3: Die Methode getAppletInfo</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="k100248.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100248.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100250.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100254.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>
|