Wie kann ein eigener Cursor definiert werden?
Die Erstellung eines selbstgestalteten Cursors gestaltet sich einfacher als vielleicht gedacht mit Hilfe einer kleinen Bilddatei. Allerdings kann dieser Cursor nicht systemweit verwendet werden, sondern ist an eine Komponente gebunden.
Zunächst muss ein kleines Icon als *.png-, *.gif- oder *.jpg-Datei erstellt und in einem Verzeichnis innerhalb des Classpath abgelegt werden. Im Quelltext wird daraufhin zur Demonstration ein JFrame deklariert, auf den in der Folge der Cursor registriert wird.
Der ClassLoader generiert einen URL aus dem relativ zum Aufruf gefundenen Pfad. Mit seiner Hilfe liest ein ImageIO-Objekt die Bilddatei aus und erzeugt ein BufferedImage.
Innerhalb der Fläche dieser Bilddatei muss nun ein sog. Hotspot definiert werden. Das ist jener Punkt, der die Aktivität des Cursors übernimmt, sozusagen der 'klickempfindliche' Punkt. Durch die Methode createCustomCursor() des DefaultToolkit kann nun der Cursor erzeugt werden. Als Parameter müssen das BufferdImage, der Hotspot, und ein frei wählbarer Name des Cursors als String übergeben werden. Dem JFrame wird nun das fertige Cursor-Objekt übergeben.
Da das Auslesen der Bilddatei scheitern kann, muss zumindest dieser Teil durch einen try-catch-Block oder eine entsprechende throws-Anweisung gekapselt werden.
import java.awt.Cursor;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class EigenerCursor {

    public EigenerCursor() {

        JFrame frame = new JFrame("Eigener Cursor");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);

        try {
            URL url = getClass().getClassLoader().getResource("img/redCursor.png"); 
            BufferedImage img = ImageIO.read(url);
            Point hotSpot = new Point(0, 0);
            Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor(img,
                    hotSpot, "red Cursor");
            frame.setCursor(cursor);
        } catch (IOException e) {
            e.printStackTrace();
        }
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new EigenerCursor();
    }
}
letzte Änderung an:
switch-case-Verzweigung