如何在JavaFX2.2游标上编写自定义文本?
我想要一个光标,除了指针本身之外,它还显示鼠标指向的位置的坐标(它应该看起来像一个带有小数字的十字线,在鼠标移动时会发生变化)。如何有效地达到这样的效果?我尝试使用工具提示机制,但是文本远远落后于光标…您可以使用当前坐标创建一个如何在JavaFX2.2游标上编写自定义文本?,java,javafx,cursor,javafx-2,Java,Javafx,Cursor,Javafx 2,我想要一个光标,除了指针本身之外,它还显示鼠标指向的位置的坐标(它应该看起来像一个带有小数字的十字线,在鼠标移动时会发生变化)。如何有效地达到这样的效果?我尝试使用工具提示机制,但是文本远远落后于光标…您可以使用当前坐标创建一个文本对象,将其快照到图像中,然后从该图像和您需要的任何其他光标装饰中创建一个可写图像。然后将可写图像包装在图像光标中: import javafx.application.Application; import javafx.event.EventHandler; imp
文本
对象,将其快照到图像中,然后从该图像和您需要的任何其他光标装饰中创建一个可写图像。然后将可写图像
包装在图像光标
中:
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Cursor;
import javafx.scene.ImageCursor;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.WritableImage;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class MouseCoordinateCursor extends Application {
@Override
public void start(Stage primaryStage) {
Pane root = new Pane();
root.setOnMouseExited(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
root.setCursor(Cursor.DEFAULT);
}
});
root.setOnMouseMoved(new EventHandler<MouseEvent>() {
final int padding = 9 ;
final int offset = 6 ;
@Override
public void handle(MouseEvent e) {
Text text = new Text(String.format("[%.1f,%.1f]", e.getX(), e.getY()));
Image textImage = text.snapshot(null, null);
int width = (int)textImage.getWidth();
int height = (int)textImage.getHeight();
WritableImage cursorImage = new WritableImage(width + offset, height + offset);
cursorImage.getPixelWriter().setPixels(offset, offset, width, height, textImage.getPixelReader(), 0, 0);
for (int i = 0; i < padding; i++) {
cursorImage.getPixelWriter().setColor(i, padding/2, Color.BLACK);
cursorImage.getPixelWriter().setColor(padding/2, i, Color.BLACK);
}
root.setCursor(new ImageCursor(cursorImage));
}
});
primaryStage.setScene(new Scene(root, 600, 600));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
导入javafx.application.application;
导入javafx.event.EventHandler;
导入javafx.scene.Cursor;
导入javafx.scene.ImageCursor;
导入javafx.scene.scene;
导入javafx.scene.image.image;
导入javafx.scene.image.WritableImage;
导入javafx.scene.input.MouseEvent;
导入javafx.scene.layout.Pane;
导入javafx.scene.paint.Color;
导入javafx.scene.text.text;
导入javafx.stage.stage;
公共类鼠标坐标游标扩展应用程序{
@凌驾
公共无效开始(阶段primaryStage){
窗格根=新窗格();
setOnMouseExited(新的EventHandler(){
@凌驾
公共无效句柄(MouseeEvent事件){
setCursor(Cursor.DEFAULT);
}
});
setOnMouseMoved(新的EventHandler(){
最终整数填充=9;
最终整数偏移=6;
@凌驾
公共无效句柄(MouseEvent e){
Text Text=新文本(String.format(“[%.1f,%.1f]”),e.getX(),e.getY());
Image textImage=text.snapshot(null,null);
int width=(int)textImage.getWidth();
int height=(int)textImage.getHeight();
WritableImage cursorImage=新的WritableImage(宽度+偏移,高度+偏移);
cursorImage.getPixelWriter().setPixels(偏移量、偏移量、宽度、高度、textImage.getPixelReader()、0、0);
for(int i=0;i
你可以贴上标签,每次鼠标坐标发生变化时,都会更改鼠标移动事件中的文本。这就是我采用的解决方案,但文本是滞后的-相对于光标,它并不总是处于相同的位置。嗯,是的,明白你的意思了。试着这样做。正如我在下面评论的那样-标签将滞后,并且相对于光标不在同一位置。