diff options
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100159.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100159.html | 415 |
1 files changed, 415 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100159.html b/Master/Reference Architectures and Patterns/hjp5/html/k100159.html new file mode 100644 index 0000000..b7a35d9 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100159.html @@ -0,0 +1,415 @@ +<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,k100158.html;107,k100160.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="k100158.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100160.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="sectlevel2id024003"></a>
+<h2>24.3 Eigenschaften von Schriftarten </h2>
+<hr>
+<ul>
+<li><a href="k100159.html#sectlevel2id024003">24.3 Eigenschaften von Schriftarten</a>
+<ul>
+<li><a href="k100159.html#sectlevel3id024003001">24.3.1 Font-Informationen</a>
+<li><a href="k100159.html#sectlevel3id024003002">24.3.2 Font-Metriken</a>
+</ul>
+</ul>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel3id024003001"></a>
+<h3>24.3.1 <a name="ixa101608">Font-Informationen</a></h3>
+
+<p>
+Die Klasse <a href="index_f.html#ixb101199"><font color=#000080><tt>Font</tt></font></a>
+besitzt Methoden, um Informationen über den aktuellen Font zu
+gewinnen:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public String getFamily()
+public int getStyle()
+public int getSize()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/awt/Font.html" onClick="this.href=getApiDoc('java.awt.Font')"><font color="#660066" size=-1>java.awt.Font</font></a></td>
+</tr>
+</table>
+
+<p>
+<a name="ixa101609"><a href="index_g.html#ixb101223"><font color=#000080><tt>getFamily</tt></font></a></a>
+liefert den systemspezifischen Namen eines Fonts, <a name="ixa101610"><a href="index_g.html#ixb101224"><font color=#000080><tt>getStyle</tt></font></a></a>
+den Style-Parameter und <a name="ixa101611"><a href="index_g.html#ixb101196"><font color=#000080><tt>getSize</tt></font></a></a>
+die Größe des Fonts. Auf diese Weise läßt sich
+ein neues Font-Objekt als Variation eines bestehenden Fonts erzeugen.
+Das folgende Beispiel zeigt eine <a href="index_p.html#ixb101148"><font color=#000080><tt>paint</tt></font></a>-Methode,
+die den zur Anzeige verwendeten Font bei jedem Aufruf um 1 Punkt vergrößert:
+<a name="listingid024005"></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">/* SchriftGroesser.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 font = getFont();
+<font color="#555555">006 </font>
+<font color="#555555">007 </font> <font color="#0000AA">if</font> (font.getSize() <= 64) {
+<font color="#555555">008 </font> setFont(
+<font color="#555555">009 </font> <font color="#0000AA">new</font> Font(
+<font color="#555555">010 </font> font.getFamily(),
+<font color="#555555">011 </font> font.getStyle(),
+<font color="#555555">012 </font> font.getSize() + 1
+<font color="#555555">013 </font> )
+<font color="#555555">014 </font> );
+<font color="#555555">015 </font> }
+<font color="#555555">016 </font> g.drawString(<font color="#0000FF">"Hello, World"</font>,40,100);
+<font color="#555555">017 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/SchriftGroesser.inc"><font color="#000055" size=-1>SchriftGroesser.inc</font></a></td>
+</tr>
+</table>
+<i>
+Listing 24.5: Vergrößern der Schriftart</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>
+Dieses Beispiel hat eine Besonderheit, denn es werden nicht die Methoden
+<a href="index_g.html#ixb101201"><font color=#000080><tt>getFont</tt></font></a>
+und <a href="index_s.html#ixb101200"><font color=#000080><tt>setFont</tt></font></a>
+der Klasse <a href="index_g.html#ixb101149"><font color=#000080><tt>Graphics</tt></font></a>
+aufgerufen, sondern diejenigen aus der Fensterklasse <a name="ixa101612"><a href="index_f.html#ixb101144"><font color=#000080><tt>Frame</tt></font></a></a>.
+Dadurch bleiben die Font-Informationen auch zwischen zwei Aufrufen
+von <a href="index_p.html#ixb101148"><font color=#000080><tt>paint</tt></font></a>
+erhalten.</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="sectlevel3id024003002"></a>
+<h3>24.3.2 <a name="ixa101613">Font-Metriken</a><a name="ixa101614"></a></h3>
+
+<p>
+Oft benötigt man Informationen über die Größe
+eines einzelnen Zeichens oder eines kompletten Strings. Anders als
+in textbasierten Systemen ist die Größe von Schriftzeichen
+bei der Programmierung unter einer grafischen Oberfläche nämlich
+nicht konstant, sondern von der Art des Fonts, dem Ausgabegerät
+und vor allem von der Breite der Zeichen selbst abhängig.
+
+<p>
+Das Größenmodell von Java sieht für ein Textzeichen
+fünf unterschiedliche Maßzahlen vor (siehe <a href="k100159.html#groessenmasszahlefonts">Abbildung 24.5</a>),
+die teilweise zu den im Schriftsatz verwendeten Begriffen kompatibel
+sind. Wichtigste Bezugsmarke für die verschiedenen Maße
+ist dabei die <a name="ixa101615"><i>Grundlinie</i></a> des Zeichens,
+die den oberen und unteren Teil voneinander trennt. Die <a name="ixa101616"><i>Unterlänge</i></a>
+gibt die Länge zwischen Grundlinie und unterer Begrenzung des
+Zeichens an. Die <a name="ixa101617"><i>Oberlänge</i></a> bezeichnet
+die Länge zwischen Grundlinie und oberem Rand des Zeichens. Die
+<a name="ixa101618"><i>Breite eines Zeichens</i></a> ist der Abstand
+vom linken Rand des Zeichens bis zum linken Rand des darauffolgenden
+Zeichens. Der <a name="ixa101619"><i>Zeilenabstand</i></a> ist der
+Abstand zwischen dem unteren Rand einer Zeile und dem oberen Rand
+der nächsten Zeile. Die <a name="ixa101620"><i>Höhe</i></a>
+ist die Summe aus Oberlänge, Unterlänge und Zeilenabstand.
+<p>
+<a name="groessenmasszahlefonts"></a>
+<img src="images/FontMetriken.gif">
+<p>
+
+<p><i>
+Abbildung 24.5: Größenmaßzahlen für Fonts in
+Java</i></p>
+
+<p>
+Zur Bestimmung der Größeneigenschaften von Zeichen wird
+die Klasse <a name="ixa101621"><a href="index_f.html#ixb101233"><font color=#000080><tt>FontMetrics</tt></font></a></a>
+verwendet. <a href="index_f.html#ixb101233"><font color=#000080><tt>FontMetrics</tt></font></a>
+ist eine abstrakte Klasse, die nicht direkt instanziert werden kann.
+Statt dessen wird sie durch Aufruf der Methode <a name="ixa101622"><a href="index_g.html#ixb101234"><font color=#000080><tt>getFontMetrics</tt></font></a></a>
+aus dem Grafikkontext gewonnen:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public FontMetrics getFontMetrics(Font font)
+public FontMetrics getFontMetrics()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/awt/Toolkit.html" onClick="this.href=getApiDoc('java.awt.Toolkit')"><font color="#660066" size=-1>java.awt.Toolkit</font></a></td>
+</tr>
+</table>
+
+<p>
+Die parameterlose Variante dient dazu, Metriken zum aktuellen Font
+zu ermitteln, an die andere kann der zu untersuchende Font als Argument
+übergeben werden. Nun stehen Methoden zur Verfügung, die
+zur Bestimmung der genannten Eigenschaften aufgerufen werden können.
+Nachfolgend werden die wichtigsten von ihnen vorgestellt.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public int charWidth(char ch)
+
+public int stringWidth(String s)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/awt/FontMetrics.html" onClick="this.href=getApiDoc('java.awt.FontMetrics')"><font color="#660066" size=-1>java.awt.FontMetrics</font></a></td>
+</tr>
+</table>
+
+<p>
+Mit <a name="ixa101623"><a href="index_c.html#ixb101235"><font color=#000080><tt>charWidth</tt></font></a></a>
+wird die Breite eines einzelnen Zeichens <font color="#000077"><tt>ch</tt></font>
+bestimmt, mit <a name="ixa101624"><a href="index_s.html#ixb101236"><font color=#000080><tt>stringWidth</tt></font></a></a>
+die eines kompletten Strings. Der Rückgabewert dieser Methoden
+wird dabei stets in Bildschirmpixeln angegeben. Bei der Anwendung
+von <a href="index_s.html#ixb101236"><font color=#000080><tt>stringWidth</tt></font></a>
+werden auch Unterschneidungen oder andere Sonderbehandlungen berücksichtigt,
+die bei der Ausgabe der Zeichenkette erfolgen würden.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public int getAscent()
+
+public int getDescent()
+
+public int getHeight()
+
+public int getLeading()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/awt/FontMetrics.html" onClick="this.href=getApiDoc('java.awt.FontMetrics')"><font color="#660066" size=-1>java.awt.FontMetrics</font></a></td>
+</tr>
+</table>
+
+<p>
+<a name="ixa101625"><a href="index_g.html#ixb101237"><font color=#000080><tt>getAscent</tt></font></a></a>
+liefert die Oberlänge des Fonts, <a name="ixa101626"><a href="index_g.html#ixb101238"><font color=#000080><tt>getDescent</tt></font></a></a>
+die Unterlänge, <a name="ixa101627"><a href="index_g.html#ixb101239"><font color=#000080><tt>getLeading</tt></font></a></a>
+den Zeilenabstand und <a name="ixa101628"><a href="index_g.html#ixb101240"><font color=#000080><tt>getHeight</tt></font></a></a>
+die Höhe. Obwohl diese Informationen für die meisten Zeichen
+des ausgewählten Fonts gültig sind, garantiert Java nicht,
+dass dies für alle Zeichen der Fall ist. Insbesondere kann es
+einzelne Zeichen geben, die eine größere Ober- oder Unterlänge
+haben. Zur Behandlung dieser Sonderfälle gibt es zusätzliche
+Methoden in <a href="index_f.html#ixb101233"><font color=#000080><tt>FontMetrics</tt></font></a>,
+die hier nicht näher behandelt werden sollen.
+
+<p>
+Das nachfolgende Beispiel zeigt eine <a href="index_p.html#ixb101148"><font color=#000080><tt>paint</tt></font></a>-Methode,
+die einige Schriftzeichen in 72 Punkt Größe zusammen mit
+einem 10*10 Pixel großen Koordinatengitter ausgibt. Zusätzlich
+gibt das Programm die Font-Metriken aus:
+<a name="listingid024006"></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">/* Fontmetriken.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 font = <font color="#0000AA">new</font> Font(<font color="#0000FF">"TimesRoman"</font>,Font.PLAIN,72);
+<font color="#555555">006 </font>
+<font color="#555555">007 </font> <font color="#00AA00">//---Linien</font>
+<font color="#555555">008 </font> g.setColor(Color.blue);
+<font color="#555555">009 </font> <font color="#0000AA">for</font> (<font color="#006699">int</font> x = 10; x <= 260; x += 10) {
+<font color="#555555">010 </font> g.drawLine(x,30,x,130);
+<font color="#555555">011 </font> }
+<font color="#555555">012 </font> <font color="#0000AA">for</font> (<font color="#006699">int</font> y = 30; y <= 130; y += 10) {
+<font color="#555555">013 </font> g.drawLine(10,y,260,y);
+<font color="#555555">014 </font> }
+<font color="#555555">015 </font> <font color="#00AA00">//---Schrift</font>
+<font color="#555555">016 </font> g.setColor(Color.black);
+<font color="#555555">017 </font> g.drawLine(0,100,270,100);
+<font color="#555555">018 </font> g.setFont(font);
+<font color="#555555">019 </font> g.drawString(<font color="#0000FF">"mgdAW"</font>,10,100);
+<font color="#555555">020 </font> <font color="#00AA00">//---Font-Metriken</font>
+<font color="#555555">021 </font> FontMetrics fm = getFontMetrics(font);
+<font color="#555555">022 </font> System.out.println(<font color="#0000FF">"Oberlänge = "</font> + fm.getAscent());
+<font color="#555555">023 </font> System.out.println(<font color="#0000FF">"Unterlänge = "</font> + fm.getDescent());
+<font color="#555555">024 </font> System.out.println(<font color="#0000FF">"Höhe = "</font> + fm.getHeight());
+<font color="#555555">025 </font> System.out.println(<font color="#0000FF">"Zeilenabstand = "</font> + fm.getLeading());
+<font color="#555555">026 </font> System.out.println(<font color="#0000FF">"---"</font>);
+<font color="#555555">027 </font> System.out.println(<font color="#0000FF">"Breite(m) = "</font> + fm.charWidth(<font color="#0000FF">'m'</font>));
+<font color="#555555">028 </font> System.out.println(<font color="#0000FF">"Breite(g) = "</font> + fm.charWidth(<font color="#0000FF">'g'</font>));
+<font color="#555555">029 </font> System.out.println(<font color="#0000FF">"Breite(d) = "</font> + fm.charWidth(<font color="#0000FF">'d'</font>));
+<font color="#555555">030 </font> System.out.println(<font color="#0000FF">"Breite(A) = "</font> + fm.charWidth(<font color="#0000FF">'A'</font>));
+<font color="#555555">031 </font> System.out.println(<font color="#0000FF">"Breite(W) = "</font> + fm.charWidth(<font color="#0000FF">'W'</font>));
+<font color="#555555">032 </font> System.out.println(<font color="#0000FF">"---"</font>);
+<font color="#555555">033 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Fontmetriken.inc"><font color="#000055" size=-1>Fontmetriken.inc</font></a></td>
+</tr>
+</table>
+<i>
+Listing 24.6: Anzeige von Font-Metriken</i></p>
+
+<p>
+Die Grafikausgabe des Programms ist wie folgt:
+<p>
+<a name="imageid024006"></a>
+<img src="images/FontMetrikBsp.gif">
+<p>
+
+<p><i>
+Abbildung 24.6: Anzeige von Font-Metriken</i></p>
+
+<p>
+Zusätzlich werden die Font-Metriken in das Textfenster geschrieben:
+<font color="#333300">
+<pre>
+Oberlänge = 73
+Unterlänge = 16
+Höhe = 93
+Zeilenabstand = 4
+---
+Breite(m) = 55
+Breite(g) = 35
+Breite(d) = 36
+Breite(A) = 52
+Breite(W) = 68
+</pre>
+</font>
+
+<p>
+Als weitere Anwendung der Font-Metriken wollen wir <a href="k100157.html#textausgabebsp">Listing 24.1</a>
+wie versprochen komplettieren und den Text zentriert ausgeben:
+<a name="listingid024007"></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">/* Zentriert.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> String s=<font color="#0000FF">"Die Client-Area ist "</font>+maxX+<font color="#0000FF">"*"</font>+maxY+<font color="#0000FF">" Pixel groß"</font>;
+<font color="#555555">008 </font> FontMetrics fm = g.getFontMetrics();
+<font color="#555555">009 </font> <font color="#006699">int</font> slen = fm.stringWidth(s);
+<font color="#555555">010 </font> g.drawString(
+<font color="#555555">011 </font> s,
+<font color="#555555">012 </font> getInsets().left + ((maxX - slen)/2),
+<font color="#555555">013 </font> getInsets().top + (maxY/2)
+<font color="#555555">014 </font> );
+<font color="#555555">015 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Zentriert.inc"><font color="#000055" size=-1>Zentriert.inc</font></a></td>
+</tr>
+</table>
+<i>
+Listing 24.7: Zentrierte Textausgabe</i></p>
+
+<p>
+Die Programmausgabe ist:
+<p>
+<a name="imageid024007"></a>
+<img src="images/TextZentriert.gif">
+<p>
+
+<p><i>
+Abbildung 24.7: Zentrierte Textausgabe</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="k100156.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100158.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100160.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>
|
