2012-04-03 11 views

Antwort

5

Sie können den Cursor ändern, indem Sie einen der vordefinierten Cursortypen verwenden oder ein Bild mit einem eigenen Cursor versehen. Das System passt die Größe des bereitgestellten Bildes jedoch automatisch an die Cursorgröße der zugrunde liegenden Plattform an. In der Dokumentation zu ImageCursor.getBestSize() und ImageCursor.chooseBestCursor() finden Sie Details zum Algorithmus, mit dem Sie die tatsächliche verwendete Cursorgröße bestimmen können.

import javafx.application.Application; 
import javafx.scene.*; 
import javafx.scene.layout.*; 
import javafx.stage.*; 

public class ResizableCursor extends Application { 
    public static void main(String[] args) { launch(args); } 
    @Override public void start(Stage stage) { 
    StackPane layout = new StackPane(); 
    layout.setCursor(Cursor.cursor("http://icons.iconarchive.com/icons/artua/star-wars/256/Death-Star-icon.png")); 
    stage.setScene(new Scene(layout, 200, 200)); 
    stage.show(); 
    } 
} 

Wenn Sie einen beliebig großen Knoten haben wollen, die mit der Maus und Aussehen und wirkt wie ein Cursor bewegt sich (aber kein Cursor), können Sie den Cursor auf Cursor.NONE einstellen können, übersetzen, dann einen Knoten zu folgen die Mausposition (wie in this example, wenn Sie auf einen Kreis klicken, um es zu verschieben). Mit dieser Strategie scheint es, als ob der Benutzer einen benutzerdefinierten Cursor beliebiger Größe hat, obwohl dies nicht der Fall ist.

Kopie der entsprechenden Dokumentation ImageCursor.getBestSize():

Ruft den Cursor Größe unterstützt, die am nächsten an der angegebenen bevorzugte Größe ist. Ein Wert von (0,0) wird zurückgegeben, wenn die Plattform benutzerdefinierte Cursor nicht unterstützt .

Hinweis: Wenn ein Bild verwendet wird, dessen Abmessungen nicht mit der unterstützten Größe übereinstimmen (wie von dieser Methode zurückgegeben), passt die Implementierung das Bild an eine unterstützte Größe an. Dies kann zu einem Qualitätsverlust führen.

Hinweis: Diese Werte können zwischen den Betriebssystemen, Grafiken variieren Karten und Bildschirmauflösung, aber zum Zeitpunkt des Schreibens dieses Artikels, eine Probe Windows Vista Maschine 32x32 für alle angeforderten Größen zurückgeführt, während Probe Mac und Linux-Maschinen zurück die angeforderte Größe bis zu einem maximal 64x64. Anwendungen sollten einen 32x32-Cursor bereitstellen, der auf allen Plattformen gut funktioniert, und optional einen 64 x 64-Cursor für die Plattformen bereitstellen können, auf denen es unterstützt wird.

0
VBox vBoxMainLayout = new VBox(); 
Scene scene = new Scene(vBoxMainLayout); 

Image img = newImage(getClass().getResourceAsStream("image.png")); 
ImageCursor cursor = new ImageCursor(img, 30, 30); 
scene.setCursor(cursor); 
+0

das ist mein Code. By the way, ältere Version von Java, es sieht aus wie möglich Brötchen bei JavaFX 2.x, ich konnte nicht finden. –

+0

Sie wissen das wahrscheinlich schon, aber falls nicht, beachten Sie, dass die 30, 30 Parameter die Koordinaten des Hotspots für den ImageCursor festlegen, nicht die Größe des ImageCursors. – jewelsea

-1
import java.awt.Toolkit; 
import javafx.scene.Cursor; 
import javafx.scene.image.Image; 

public class ColorChooser extends Cursor 
{ 

    public override function impl_getAWTCursor(): java.awt.Cursor { 

     def url = "{__DIR__}eyedropper.png"; 

     var toolkit = Toolkit.getDefaultToolkit(); 

     var image = Image{width:32 height:32 url:url}.bufferedImage; 
     var hotspot = new java.awt.Point(0,15); 
     var cursor = toolkit.createCustomCursor(image, hotspot "colorpicker"); 

     return cursor; 
    } 
} 
+0

Aber dieser Code ist alte Version. –

Verwandte Themen