ウィリアム・F:
私のアプリケーションは、SwingおよびJavaFXのを兼ね備えています。私は、同じカーソルを使用するすべてのコンポーネントをしたいと思います。
AWTカーソルからJavaFXのカーソルを作成するための最良の方法は何ですか?
EDIT:と呼ばれるユーティリティパッケージがありjavafx.embed.swing.SwingCursors
、残念ながらそれはパブリックではありません。しかし、多分私はそれからコードを盗むことができます。
VGR:
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");
});
});