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"> 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="k100150.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100150.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100152.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100156.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 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">Ä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ür die Gestaltung grafischer Oberflächen
zur Verfügung zu stellen. Das Resultat dieser Bemü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ügung.
<p>
Die Fähigkeiten des AWT lassen sich grob in vier Gruppen unterteilen:
<ul>
<li>Grafische Primitivoperationen zum Zeichnen von Linien oder Füllen
von Flächen und zur Ausgabe von Text
<li>Methoden zur Steuerung des Programmablaufs auf der Basis von Nachrichten
fü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ähigkeiten Bestandteil der Sprache bzw. ihrer
Klassenbibliothek sind, können sie als portabel angesehen werden.
Unabhängig von der Zielplattform wird ein GUI-basiertes Programm
auf allen verwendeten Systemen gleich oder zumindest ähnlich
laufen.
<!-- Section -->
<a name="sectlevel3id023001002"></a>
<h3>23.1.2 Von AWT nach Swing </h3>
<!-- Section -->
<a name="sectlevel4id023001002001"></a>
<h4>Ä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äche, war aber durch eine Reihe von Fehlern und Restriktionen
des AWT eingeschränkt. Vor allem bei der Erstellung großer
GUI-Anwendungen wurden die Programme schnell unübersichtlich,
und die Performance litt unter dem unzulänglichen Event-Modell
der Version 1.0. Mit der Version 1.1 des JDK hat SUN das AWT massiv
verändert. Es gab umfangreiche Fehlerbehebungen, und eine Vielzahl
von Methodennamen wurde geändert. Vor allem aber wurde das Event-Handling,
also der Transfer von GUI-Ereignissen, komplett überarbeitet.
<p>
Das neue Schlagwort lautet <a name="ixa101521"><i>Delegation Based Event Handling</i></a>.
Es bezeichnet die Fähigkeit des AWT, GUI-Ereignisse an beliebige
Objekte weiterzuleiten und dort zu behandeln. Obwohl das Verständnis
für diese neuen Techniken etwas schwieriger zu erlangen ist als
beim alten Event-Modell, lohnt sich der zusätzliche Aufwand.
Die Entwicklung großer GUI-Anwendungen mit einer klaren Trennung
zwischen Benutzeroberfläche und Applikationslogik wird so erst
mö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ührt.
<!-- Section -->
<a name="sectlevel4id023001002002"></a>
<h4>Swing </h4>
<p>
Neben dem AWT gibt es eine zweite Bibliothek für die Gestaltung
grafischer Benutzeroberflächen. Sie heißt <a name="ixa101522"><i>Swing</i></a>,
ist seit dem JDK 1.1 als Add-On verfügbar und seit der Version
1.2 fester Bestandteil des Java Development Kit. Da Swing-Anwendungen
in ihren Möglichkeiten weit ü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ächst mit dem AWT zu beschäftigen.
<p>
Einerseits ist das AWT einfacher zu erlernen, denn es ist weniger
umfangreich als Swing. Gerade als Anfänger muss man nicht so
viele neue Konzepte erlernen. Zum anderen werden viele der AWT-Features
auch in Swing benötigt, und das mühsam angeeignete Wissen
ist nicht vö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ällen gleich. Drittens gibt es auch
heute noch Anwendungen fü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ßlich Swing lernen wollen und das
AWT als unnö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 übersprungen werden, denn es beschreibt
die Arbeitsweise und Anwendung der Layoutmanager. Die ü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"> Tipp </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"> 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="k100150.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100150.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100152.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100156.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>
|