Titel   Inhalt   Suchen   Index   DOC  Handbuch der Java-Programmierung, 7. Auflage
 <<    <     >    >>   API  Kapitel 25 - Textausgabe

25.1 Ausgabefunktionen



Neben den Methoden zur Ausgabe von Linien- oder Flächengrafiken gibt es in Java die Möglichkeit, Text in einem Fenster auszugeben. Die dafür vorgesehenen Methoden drawString, drawChars und drawBytes gehören ebenfalls zur Klasse Graphics:

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
)
java.awt.Graphics

Die einfachste Methode, Text auszugeben, besteht darin, drawString aufzurufen und dadurch den String str im Grafikfenster an der Position (x,y) auszugeben. Das Koordinatenpaar (x,y) bezeichnet dabei das linke Ende der Basislinie des ersten Zeichens in str. Die Bedeutung der Basislinie wird später bei der Beschreibung der Font-Metriken erläutert.

In dem folgenden Beispiel wird versucht, einen String, der die Größe der Client-Area angibt, zentriert im Ausgabefenster auszugeben (wir verwenden immer noch Listing 24.4 aus Kapitel 24):

001 /* Textausgabe.inc */
002 
003 public void paint(Graphics g)
004 {
005   int maxX=getSize().width-getInsets().left-getInsets().right;
006   int maxY=getSize().height-getInsets().top-getInsets().bottom;
007 
008   g.drawString(
009     "Die Client-Area ist "+maxX+"*"+maxY+" Pixel groß",
010     getInsets().left + maxX/2,
011     getInsets().top + maxY/2
012   );
013 }
Textausgabe.inc
Listing 25.1: Einfache Textausgabe im Grafikfenster

Abbildung 25.1: Einfache Textausgabe

Man kann an diesem Beispiel gut sehen, wie die Größe der Client-Area ermittelt werden kann. Zunächst wird durch Aufruf von getSize 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 getInsets zugegriffen werden. Sie gibt die Abmessungen der Elemente an, die um die Client-Area herum platziert sind.

Abbildung 25.2 erweitert das in Kapitel 24 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 x-Koordinate getInsets().left und die y-Koordinate getInsets().top.

Abbildung 25.2: Die Randelemente eines Fensters

Leider hat das Programm einen kleinen Schönheitsfehler, denn der Mittelpunkt des Fensters wird zur Ausgabe des ersten Zeichens verwendet, obwohl dort eigentlich der Mittelpunkt des gesamten Strings liegen sollte. Wir werden dieses Beispiel später komplettieren, wenn uns mit Hilfe von Font-Metriken die Möglichkeit zur Verfügung steht, die Breite und Höhe eines Strings zu messen.

 Hinweis 

Die Methode drawString 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 2D-API des JDK stellt darüber hinaus viele zusätzliche Grafikfunktionen plattformübergreifend zur Verfügung.

Die Methoden drawChars und drawBytes sind leichte Variationen von drawString. Anstelle eines Strings erwarten sie ein Array von Zeichen bzw. Bytes als Quelle für den auszugebenden Text. Mit offset und length stehen zwei zusätzliche Parameter zur Verfügung, die zur Angabe der Startposition bzw. der Anzahl der auszugebenden Zeichen verwendet werden können.


 Titel   Inhalt   Suchen   Index   DOC  Handbuch der Java-Programmierung, 7. Auflage, Addison Wesley, Version 7.0
 <<    <     >    >>   API  © 1998, 2011 Guido Krüger & Heiko Hansen, http://www.javabuch.de