Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage
<< | < | > | >> | API | Kapitel 24 - Textausgabe

## 24.1 Ausgabefunktionen

- 24.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 23.4 aus Kapitel 23):

    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 24.1: Einfache Textausgabe im Grafikfenster

Abbildung 24.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 plaziert sind.

Abbildung 24.2 erweitert das in Kapitel 23 erläuterte Koordinatensystem des AWT um die erwähnten Randelemente. Dabei ist insbesondere zu erkennen, daß 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 24.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, daß eine Java-Portierung in der Regel nicht alle Funktionen des darunterliegenden Betriebssystems zur Verfügung stellen kann. Das 2D-API des JDK 1.2 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, 3. Auflage, Addison Wesley, Version 3.0
<< | < | > | >> | API | © 1998-2002 Guido Krüger, http://www.javabuch.de