summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100151.html
blob: 37eddf03d17de7ae967c81b5e6f64d6a6153105a (plain)
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
<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,k100150.html;106,k100150.html;107,k100152.html;108,k100156.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="k100150.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100150.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100152.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100156.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 23 - Grafikausgabe
</table>
<hr>


<!-- Section -->
<a name="sectlevel2id023001"></a>
<h2>23.1 Das Abstract Windowing Toolkit </h2>
<hr>
<ul>
<li><a href="k100151.html#sectlevel2id023001">23.1 Das Abstract Windowing Toolkit</a>
<ul>
<li><a href="k100151.html#sectlevel3id023001001">23.1.1 Grundlegende Eigenschaften</a>
<li><a href="k100151.html#sectlevel3id023001002">23.1.2 Von AWT nach Swing</a>
<ul>
<li><a href="k100151.html#sectlevel4id023001002001">&Auml;nderungen mit dem JDK 1.1</a>
<li><a href="k100151.html#sectlevel4id023001002002">Swing</a>
</ul>
</ul>
</ul>
<hr>


<!-- Section -->
<a name="sectlevel3id023001001"></a>
<h3>23.1.1 Grundlegende Eigenschaften </h3>

<p>
Im Gegensatz zu den meisten anderen Programmiersprachen wurde Java
von Anfang an mit dem Anspruch entwickelt, ein vielseitiges, aber
einfach zu bedienendes System f&uuml;r die Gestaltung grafischer Oberfl&auml;chen
zur Verf&uuml;gung zu stellen. Das Resultat dieser Bem&uuml;hungen
steht seit dem JDK 1.0 als Grafikbibliothek unter dem Namen <a name="ixa101519"><i>Abstract
Windowing Toolkit</i></a> (<a name="ixa101520"><i>AWT</i></a>)
zur Verf&uuml;gung. 

<p>
Die F&auml;higkeiten des AWT lassen sich grob in vier Gruppen unterteilen:
<ul>
<li>Grafische Primitivoperationen zum Zeichnen von Linien oder F&uuml;llen
von Fl&auml;chen und zur Ausgabe von Text
<li>Methoden zur Steuerung des Programmablaufs auf der Basis von Nachrichten
f&uuml;r Tastatur-, Maus- und Fensterereignisse
<li>Dialogelemente zur Kommunikation mit dem Anwender und Funktionen
zum portablen Design von Dialogboxen
<li>Fortgeschrittenere Grafikfunktionen zur Darstellung und Manipulation
von Bitmaps und zur Ausgabe von Sound
</ul>

<p>
Da die grafischen F&auml;higkeiten Bestandteil der Sprache bzw. ihrer
Klassenbibliothek sind, k&ouml;nnen sie als portabel angesehen werden.
Unabh&auml;ngig von der Zielplattform wird ein GUI-basiertes Programm
auf allen verwendeten Systemen gleich oder zumindest &auml;hnlich
laufen. 

<!-- Section -->

<a name="sectlevel3id023001002"></a>
<h3>23.1.2 Von AWT nach Swing </h3>


<!-- Section -->
<a name="sectlevel4id023001002001"></a>
<h4>&Auml;nderungen mit dem JDK 1.1 </h4>

<p>
Die Entwicklung von grafikorientierten Anwendungen im JDK 1.0 war
zwar relativ einfach und erzeugte portable Programme mit grafischer
Oberfl&auml;che, war aber durch eine Reihe von Fehlern und Restriktionen
des AWT eingeschr&auml;nkt. Vor allem bei der Erstellung gro&szlig;er
GUI-Anwendungen wurden die Programme schnell un&uuml;bersichtlich,
und die Performance litt unter dem unzul&auml;nglichen Event-Modell
der Version 1.0. Mit der Version 1.1 des JDK hat SUN das AWT massiv
ver&auml;ndert. Es gab umfangreiche Fehlerbehebungen, und eine Vielzahl
von Methodennamen wurde ge&auml;ndert. Vor allem aber wurde das Event-Handling,
also der Transfer von GUI-Ereignissen, komplett &uuml;berarbeitet.

<p>
Das neue Schlagwort lautet <a name="ixa101521"><i>Delegation Based Event Handling</i></a>.
Es bezeichnet die F&auml;higkeit des AWT, GUI-Ereignisse an beliebige
Objekte weiterzuleiten und dort zu behandeln. Obwohl das Verst&auml;ndnis
f&uuml;r diese neuen Techniken etwas schwieriger zu erlangen ist als
beim alten Event-Modell, lohnt sich der zus&auml;tzliche Aufwand.
Die Entwicklung gro&szlig;er GUI-Anwendungen mit einer klaren Trennung
zwischen Benutzeroberfl&auml;che und Applikationslogik wird so erst
m&ouml;glich gemacht. Wir werden in <a href="k100180.html#kapiteleventhandling">Kapitel 28</a>
detailliert auf das neue Paradigma eingehen. Wo erforderlich, werden
einzelne Bestandteile bereits vorher informell eingef&uuml;hrt. 

<!-- Section -->

<a name="sectlevel4id023001002002"></a>
<h4>Swing </h4>

<p>
Neben dem AWT gibt es eine zweite Bibliothek f&uuml;r die Gestaltung
grafischer Benutzeroberfl&auml;chen. Sie hei&szlig;t <a name="ixa101522"><i>Swing</i></a>,
ist seit dem JDK 1.1 als Add-On verf&uuml;gbar und seit der Version
1.2 fester Bestandteil des Java Development Kit. Da Swing-Anwendungen
in ihren M&ouml;glichkeiten weit &uuml;ber das hinausgehen, was das
AWT bietet, werden heute die meisten GUI-Programme mit Swing geschrieben.
Wir beschreiben Swing ab <a href="k100228.html#kapitelswinggrundlagen">Kapitel 35</a>.
Dennoch macht es Sinn, sich zun&auml;chst mit dem AWT zu besch&auml;ftigen.

<p>
Einerseits ist das AWT einfacher zu erlernen, denn es ist weniger
umfangreich als Swing. Gerade als Anf&auml;nger muss man nicht so
viele neue Konzepte erlernen. Zum anderen werden viele der AWT-Features
auch in Swing ben&ouml;tigt, und das m&uuml;hsam angeeignete Wissen
ist nicht v&ouml;llig verloren. Ob es um die Verwendung von Farben
oder unterschiedlichen Schriftarten oder um die Anordnung von Dialogelementen
mit Hilfe von Panels und Layout-Managern geht, die zugrunde liegenden
Techniken sind in beiden F&auml;llen gleich. Drittens gibt es auch
heute noch Anwendungen f&uuml;r das AWT, etwa bei der Applet-Programmierung,
oder wenn die Verwendung von plattformspezifischen Dialogelementen
zwingend erforderlich ist. 
<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>
Leser, die dennoch ausschlie&szlig;lich Swing lernen wollen und das
AWT als unn&ouml;tigen Ballast ansehen, brauchen die Kapitel <a href="k100192.html#kapitelmenues">30</a>
und <a href="k100206.html#kapitelawtdialogelemente">32</a> lediglich
kurz anzusehen. Das dazwischen liegende <a href="k100201.html#kapitelguidialoge">Kapitel 31</a>
sollte dagegen nicht &uuml;bersprungen werden, denn es beschreibt
die Arbeitsweise und Anwendung der Layoutmanager. Die &uuml;brigen
Kapitel in diesem Teil des Buchs behandeln Themen, die in beiden Welten
von Bedeutung sind.</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>
<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="k100150.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100150.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100152.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100156.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>