gpt4 book ai didi

java - 将 awt/Cursor 转换为 JavaFX 场景/Cursor?

转载 作者:行者123 更新时间:2023-12-01 14:21:06 27 4
gpt4 key购买 nike

我的应用程序结合了 Swing 和 JavaFX。我希望所有组件都使用相同的光标。

从 AWT 游标创建 JavaFX 游标的最佳方法是什么?

编辑:有一个名为 javafx.embed.swing.SwingCursors 的实用程序包,不幸的是它不是公开的。但也许我可以从中窃取代码。

最佳答案

混合使用 Swing 和 JavaFX 的棘手之处在于它们都需要在一个特定的线程中执行。除此之外,为每个工具包制作游标非常简单。

获取标准游标:

private java.awt.Cursor awtCursor;
private javafx.scene.Cursor fxCursor;

// ...

EventQueue.invokeLater(() -> {
awtCursor = java.awt.Cursor.getPredefinedCursor(
java.awt.Cursor.CROSSHAIR_CURSOR);
});

Platform.runLater(() -> {
fxCursor = javafx.scene.Cursor.CROSSHAIR;
});

很容易发现 list of standard AWT cursors() 之间的类似物与 list of standard JavaFX cursors .

从图像 URL 制作自定义光标:

private java.awt.Cursor awtCursor;
private javafx.scene.Cursor fxCursor;

// ...

URL cursorURL = MyApplication.class.getResource("specialcursor.png");

EventQueue.invokeLater(() -> {
java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
awtCursor = toolkit.createCustomCursor(
toolkit.getImage(cursorURL),
new java.awt.Point(12, 12),
"specialcursor");
});

Platform.runLater(() -> {
fxCursor = new ImageCursor(
new javafx.scene.image.Image(cursorURL.toString()), 12, 12);

});

对于现有图像,它非常相似,但您必须注意线程限制。

从现有的 AWT 图像制作自定义光标:

private java.awt.Cursor awtCursor;
private javafx.scene.Cursor fxCursor;

// ...

EventQueue.invokeLater(() -> {

java.awt.Image image = /* ... */;

awtCursor = toolkit.createCustomCursor(
image,
new java.awt.Point(12, 12),
"specialcursor");

Platform.runLater(() -> {
fxCursor = new ImageCursor(
javafx.embed.swing.SwingFXUtils.toFXImage(image, null),
12, 12);

});
});

从现有的 JavaFX 图像制作自定义光标:

private java.awt.Cursor awtCursor;
private javafx.scene.Cursor fxCursor;

// ...
Platform.runLater(() -> {
javafx.scene.image.Image image = /* ... */;

fxCursor = new ImageCursor(image, 12, 12);

EventQueue.invokeLater(() -> {

awtCursor = toolkit.createCustomCursor(
javafx.embed.swing.SwingFXUtils.fromFXImage(image, null),
new java.awt.Point(12, 12),
"specialcursor");
});
});

关于java - 将 awt/Cursor 转换为 JavaFX 场景/Cursor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60970087/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com