Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


8.7.1

Cursor


Seit dem JDK 1.1 ist es möglich, die Darstellung des Cursor für jede Komponente zu ändern. Beim JDK 1.0 konnte man eine Cursor-Form jeweils nur für einen Frame festlegen.

Im JDK 1.1 wird ein Cursor durch die Klasse Cursor repräsentiert. In dieser Klasse sind zahlreiche Konstanten enthalten, die stellvertretend für die verschiedenen Erscheinungsformen eines Cursors stehen:

Tabelle 8.3: Konstanten für die einzelnen Cursor-Formen
DEFAULT_CURSORWAIT_CURSORS_RESIZE_CURSOR
CROSSHAIR_CURSORN_RESIZE_CURSORSW_RESIZE_CURSOR
HAND_CURSORNE_RESIZE_CURSORW_RESIZE_CURSOR
MOVE_CURSORE_RESIZE_CURSORNW_RESIZE_CURSOR
TEXT_CURSORSE_RESIZE_CURSOR

Jede Komponente hat bereits einen voreingestellten Cursor. Wenn man den Mauszeiger in ein Textfeld bewegt, erscheint der Cursor, der der Konstante TEXT_CURSOR zugeordnet ist.

Der aktuell eingestellte Cursor einer Komponente kann man mit der Methode getCursor() abfragen. getCursor() ist in der Klasse Component definiert und liefert das Cursor-Objekt zurück, das den gerade eingestellten Cursor repräsentiert.

Um einen Cursor in einer Komponente zu ändern, muss zunächst einmal ein Cursor-Objekt angelegt werden. Hierbei wird dem Konstruktor der Klasse Cursor die Konstante übergeben, die die gewünschte Cursor-Darstellung repräsentiert:
  Cursor c = new Cursor(Cursor.MOVE_CURSOR);
Anschließend kann der Cursor mit der Methode setCursor() gesetzt werden. setCursor() ist ebenfalls in der Klasse Component definiert:
  Draw can = new DrawComponent();
  can.setCursor(c);
Im obigen Beispiel wird der Cursor in einer von JComponent abgeleiteten Klasse gesetzt.

Es ist zu beachten, dass die Cursor-Form innerhalb der Komponenten-Hierarchie an alle Komponenten vererbt wird, die über den Cursor-Typ DEFAULT_CURSOR verfügen. Verfügt eine Komponente allerdings über einen anderen Cursor-Typ, so übernimmt der Cursor in dieser Komponente nicht die Darstellung seines Containers. Das ist z. B. bei den Textkomponenten der Fall, aber auch, wenn man einer beliebigen Komponente mit der Methode setCursor() einen anderen Cursor-Typ als DEFAULT_CURSOR zuweist. Der neue Cursor-Typ hat dann Vorrang vor dem Vererbten.

Ab dem [1.2] JDK 1.2 ist es möglich, eigene Cursor-Formen zu definieren, falls dies die Plattform zulässt, unter der eine Java-Anwendung ausgeführt wird. Zu diesem Zweck wurden der Klasse Toolkit einige neue Methoden hinzugefügt. Die wichtigste dieser Methoden ist
  public Cursor createCustomCursor(Image, Point, String)
Diese Methode verfügt über drei Parameter: Ein Image-Exemplar, das den eigentlichen Cursor darstellt, ein Point-Exemplar, das den Hotspot innerhalb des Bildes spezifiziert und einen String, der einen sprechenden Namen für den Cursor enthalten sollte. Mit Hotspot ist der Punkt innerhalb des Cursors gemeint, mit dem geklickt werden kann. Bei einem pfeilförmigen Cursor ist das z. B. üblicherweise die Pfeilspitze.

Als Grundlage für Cursor bieten sich vor allem Bilder im gif-Format an, die über einen transparenten Hintergrund verfügen. Das zugrunde liegende Bild sollte jedoch in Hinblick auf zwei Eigenschaften möglichst ideale Voraussetzungen mitbringen: Die Bildgröße und die Anzahl der verwendeten Farben. Für die Abfrage der optimalen Bildgröße stellt die Klasse Toolkit die Methode
  public Dimension getBestCursorSize(int, int)
zur Verfügung. Als Parameter werden gewünschte Breite und Höhe des Cursors angegeben. Die verwendete Größe wird als Ergebnis zurückgegeben. Falls eine Plattform das Erzeugen eines benutzerdefinierten Cursor nicht unterstützt, liefert getBestCursorSize() ein Dimension-Exemplar mit einer Breite und einer Höhe von 0 zurück. Verwendet man ein Bild für einen Cursor, das größer ist als der von getBestCursorSize() zurückgelieferte Wert, skaliert createCustomCursor() das Bild automatisch auf die richtige Größe.

Eine weitere wichtige Methode der Klasse Toolkit ist
  public int getMaximumCursorColors()
Diese Methode liefert die Anzahl an Farben zurück, die für einen Cursor verwendet werden kann. Ein Ergebniswert von 0 zeigt an, dass die Plattform keine benutzerdefinierten Cursor unterstützt. Liefert diese Methode 2 als Ergebnis, werden nur schwarz-weiß Cursor unterstützt. Nach Möglichkeit sollte das verwendete Bild dann auch schon in diesem Format vorliegen.

Die Verwendung eines benutzerdefinierten Cursor wird im Folgenden an einem Beispiel demonstriert: Beim Start des Applets wird ein handförmiger Cursor eingestellt. Beim Druck einer Maustaste wird der Cursor zu einem faustförmigen Cursor verändert, bis die Maustaste wieder losgelassen wird. Während der gesamten Laufzeit des Applets wird der Hotspot des aktuellen Cursor durch ein Fadenkreuz markiert.

Zunächst werden die entsprechenden Cursor erzeugt:
  Image handimg, fistimg;
  // Erzeugen der Cursor
  handimg = getImage(getCodeBase(), "images/handcur.gif");
  fistimg = getImage(getCodeBase(), "images/fistcur.gif");
  hand = t.createCustomCursor(handimg,
                         new Point(12, 2), "HandCursor");
  fist = t.createCustomCursor(fistimg,
                         new Point(12, 8), "FistCursor");
  // Standard-Cursor setzen
  setCursor(hand);
Beim Druck bzw. beim Loslassen einer Maustaste wird dann anschließend der Cursor verändert:
  switch(e.getID()) {
  case MouseEvent.MOUSE_PRESSED:
    // Bei Mausdruck Faustcursor setzen
    setCursor(fist);
    break;
  case MouseEvent.MOUSE_RELEASED:
    // Beim Loslassen der Maustaste Handcursor setzen
    setCursor(hand);
  }


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.