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
|
<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,k100156.html;106,k100156.html;107,k100158.html;108,k100161.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="k100156.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100156.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100158.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100161.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 24 - Textausgabe
</table>
<hr>
<!-- Section -->
<a name="sectlevel2id024001"></a>
<h2>24.1 Ausgabefunktionen </h2>
<hr>
<ul>
<li><a href="k100157.html#sectlevel2id024001">24.1 Ausgabefunktionen</a>
</ul>
<hr>
<p>
Neben den Methoden zur Ausgabe von Linien- oder Flächengrafiken
gibt es in Java die Möglichkeit, <i>Text</i> in einem Fenster
auszugeben. Die dafür vorgesehenen Methoden <a name="ixa101575"><a href="index_d.html#ixb101193"><font color=#000080><tt>drawString</tt></font></a></a>,
<a name="ixa101576"><a href="index_d.html#ixb101194"><font color=#000080><tt>drawChars</tt></font></a></a>
und <a name="ixa101577"><a href="index_d.html#ixb101195"><font color=#000080><tt>drawBytes</tt></font></a></a>
gehören ebenfalls zur Klasse <a href="index_g.html#ixb101149"><font color=#000080><tt>Graphics</tt></font></a>:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public void drawString(
String str, int x, int y
)
public void drawChars(
char[] data, int offset, int length, int x, int y
)
public void drawBytes(
byte[] data, int offset, int length, int x, int y
)
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/awt/Graphics.html" onClick="this.href=getApiDoc('java.awt.Graphics')"><font color="#660066" size=-1>java.awt.Graphics</font></a></td>
</tr>
</table>
<p>
Die einfachste Methode, Text auszugeben, besteht darin, <a href="index_d.html#ixb101193"><font color=#000080><tt>drawString</tt></font></a>
aufzurufen und dadurch den String <font color="#000077"><tt>str</tt></font>
im Grafikfenster an der Position <font color="#000077"><tt>(x,y)</tt></font>
auszugeben. Das Koordinatenpaar <font color="#000077"><tt>(x,y)</tt></font>
bezeichnet dabei das linke Ende der <i>Basislinie</i> des ersten Zeichens
in <font color="#000077"><tt>str</tt></font>. Die Bedeutung der Basislinie
wird später bei der Beschreibung der Font-Metriken erläutert.
<p>
In dem folgenden Beispiel wird versucht, einen String, der die Größe
der Client-Area angibt, zentriert im Ausgabefenster auszugeben (wir
verwenden immer noch <a href="k100153.html#grafikrahmenprog">Listing 23.4</a>
aus <a href="k100150.html#kapitelgrafikausgabe">Kapitel 23</a>):
<a name="textausgabebsp"></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">/* Textausgabe.inc */</font>
<font color="#555555">002 </font>
<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#006699">void</font> paint(Graphics g)
<font color="#555555">004 </font>{
<font color="#555555">005 </font> <font color="#006699">int</font> maxX=getSize().width-getInsets().left-getInsets().right;
<font color="#555555">006 </font> <font color="#006699">int</font> maxY=getSize().height-getInsets().top-getInsets().bottom;
<font color="#555555">007 </font>
<font color="#555555">008 </font> g.drawString(
<font color="#555555">009 </font> <font color="#0000FF">"Die Client-Area ist "</font>+maxX+<font color="#0000FF">"*"</font>+maxY+<font color="#0000FF">" Pixel groß"</font>,
<font color="#555555">010 </font> getInsets().left + maxX/2,
<font color="#555555">011 </font> getInsets().top + maxY/2
<font color="#555555">012 </font> );
<font color="#555555">013 </font>}</pre>
</font>
</td>
<td valign=top align=right>
<a href="../examples/Textausgabe.inc"><font color="#000055" size=-1>Textausgabe.inc</font></a></td>
</tr>
</table>
<i>
Listing 24.1: Einfache Textausgabe im Grafikfenster</i></p>
<p>
<a name="imageid024001"></a>
<img src="images/TextAusgabe.gif">
<p>
<p><i>
Abbildung 24.1: Einfache Textausgabe</i></p>
<p>
Man kann an diesem Beispiel gut sehen, wie die Größe der
Client-Area ermittelt werden kann. Zunächst wird durch Aufruf
von <a name="ixa101578"><a href="index_g.html#ixb101196"><font color=#000080><tt>getSize</tt></font></a></a>
die Größe des gesamten Fensters bestimmt. Anschließend
werden die Teile des Fensters herausgerechnet, die nicht der Client-Area
zur Verfügung stehen, nämlich der Rahmen und die Titelzeile.
Auf diese Informationen kann mit Hilfe der Methode <a name="ixa101579"><a href="index_g.html#ixb101153"><font color=#000080><tt>getInsets</tt></font></a></a>
zugegriffen werden. Sie gibt die Abmessungen der Elemente an, die
um die Client-Area herum platziert sind.
<p>
<a href="k100157.html#randelementefenster">Abbildung 24.2</a> erweitert
das in <a href="k100150.html#kapitelgrafikausgabe">Kapitel 23</a>
erläuterte Koordinatensystem des AWT um die erwähnten Randelemente.
Dabei ist insbesondere zu erkennen, dass der Punkt (0,0) nicht den
Ursprung der Client-Area bezeichnet, sondern die linke obere Ecke
des Fensters. Der Ursprung der Client-Area hat die <i>x</i>-Koordinate
<font color="#000077"><tt>getInsets().left</tt></font> und die <i>y</i>-Koordinate
<font color="#000077"><tt>getInsets().top</tt></font>.
<p>
<a name="randelementefenster"></a>
<img src="images/FensterRand.gif">
<p>
<p><i>
Abbildung 24.2: Die Randelemente eines Fensters</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>
Leider hat das Programm einen kleinen Schönheitsfehler, denn
der Mittelpunkt des Fensters wird zur Ausgabe des <i>ersten</i> Zeichens
verwendet, obwohl dort eigentlich der Mittelpunkt des gesamten Strings
liegen sollte. Wir werden dieses Beispiel später komplettieren,
wenn uns mit Hilfe von <i>Font-Metriken</i> die Möglichkeit zur
Verfügung steht, die Breite und Höhe eines Strings zu messen.</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>
<p>
Die Methode <a href="index_d.html#ixb101193"><font color=#000080><tt>drawString</tt></font></a>
ist leider nicht besonders vielseitig, denn sie kann Text weder drehen
noch clippen. Sie interpretiert auch keine eingebetteten Formatierungen,
wie beispielsweise einen Zeilenumbruch oder einen Tabulator. Da es
im Windows-API all diese und noch weitere Möglichkeiten gibt,
zeigt sich hier wie auch an anderen Stellen des AWT, dass eine Java-Portierung
in der Regel nicht alle Funktionen des darunterliegenden Betriebssystems
zur Verfügung stellen kann. Das <a name="ixa101580"><i>2D-API</i></a>
des JDK 1.2 stellt darüber hinaus viele zusätzliche Grafikfunktionen
plattformübergreifend zur Verfügung.
<p>
Die Methoden <a href="index_d.html#ixb101194"><font color=#000080><tt>drawChars</tt></font></a>
und <a href="index_d.html#ixb101195"><font color=#000080><tt>drawBytes</tt></font></a>
sind leichte Variationen von <a href="index_d.html#ixb101193"><font color=#000080><tt>drawString</tt></font></a>.
Anstelle eines Strings erwarten sie ein Array von Zeichen bzw. Bytes
als Quelle für den auszugebenden Text. Mit <font color="#000077"><tt>offset</tt></font>
und <font color="#000077"><tt>length</tt></font> stehen zwei zusätzliche
Parameter zur Verfügung, die zur Angabe der Startposition bzw.
der Anzahl der auszugebenden Zeichen verwendet werden können.
<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="k100156.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100156.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100158.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100161.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>
|