我正在将JavaFX登录屏幕嵌入到Swing应用程序中。
我在JPanel的内容框架中添加了JFXPanel。加载应用程序后,一切都会顺利进行,直到我将鼠标移到内容窗格中(有关此情况的视频,请参见下面的链接)。 当我的鼠标在窗格中积极移动时,渲染变得非常缓慢:
期望的行为:
下面的代码是该问题的最小重现示例。
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.*;
import javax.swing.*;
import java.io.IOException;
import java.net.URL;
public class TestJFXPanel {
public static void main(String[] args) throws IOException {
/*
Create pane with as background an animated image (GIF)
*/
final Pane pane = new Pane();
final URL url = new URL("https://i.stack.imgur.com/AvkzQ.gif");
pane.setBackground(new Background(new BackgroundImage(
new Image(url.openStream()),
BackgroundRepeat.NO_REPEAT,
BackgroundRepeat.NO_REPEAT,
BackgroundPosition.CENTER,
BackgroundSize.DEFAULT)));
/*
Set the pane as root of a Scene
*/
final JFXPanel panel = new JFXPanel();
panel.setScene(new Scene(pane, 500, 500));
/*
Invoke JFrame on AWT thread
*/
SwingUtilities.invokeLater(() -> {
final JFrame jFrame = new JFrame();
// Add JFXPanel to content pane of JFrame
jFrame.getContentPane().add(panel);
jFrame.pack();
jFrame.setVisible(true);
});
}
}
我的想法:
但是,如果有人更熟悉将JavaFX与Swing集成并且认为我的怀疑是错误的。非常感谢一些有关如何进行的建议!
更新:
processMouseMotionEvent
方法时,不会消耗MouseMotionEvents时,不会发生此问题。我认为这可能是JavaFX和MacOS之间的兼容性问题。