Хитрость в смешивании 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;
});
Найти список между списком стандартных курсоров AWT легко ( ) со списком стандартных курсоров JavaFX .
Создание пользовательского курсора из 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");
});
});