【问题标题】:Adding JFXPanel to a JFrame. Why is it not working?将 JFXPanel 添加到 JFrame。为什么它不起作用?
【发布时间】:2011-10-06 07:16:58
【问题描述】:

我正在尝试将 JFXPanel 添加到我的 JFrame。我正在使用 Netbeans 和 Netbeans 的 Swing GUI Builder。当我运行它时,我没有收到任何错误,并且 JFrame 已成功创建,但带有文本的 JFXPanel 没有出现。

这是我的代码:

public class TestingFX {

  private static void initJFrame() {

    NewJFrame frame = new NewJFrame();
    final JFXPanel fxPanel = new JFXPanel();
    frame.add(fxPanel);
    frame.setVisible(true);

    Platform.runLater(new Runnable() {

        @Override
        public void run() {
            fxPanel.setScene(createScene());
        }
    });
  }

  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            initJFrame();
        }
    });
  }

  public static Scene createScene() {
    Text text = new Text("Hello World");
    text.setFont(new Font(24));
    text.setEffect(new Reflection());

    BorderPane pane = new BorderPane();
    pane.setCenter(text);
    Scene scene = new Scene(pane);

    return scene;
  }
}

为什么它不起作用?我做错了吗?

【问题讨论】:

  • 我从来没有使用过JavaFX,但是我总是听到将Swing与JavaFX混合使用的负面结果,在tihs论坛,NetBeans论坛上搜索..
  • @Dorothy,我的回答对你有帮助吗?
  • @Moonbeam 是的。我刚刚实现了您的代码并且它有效。然后我用我的 JFrame (NewJFrame) 替换了 JFrame,并将 outerFX.add(javafxPanel, BorderLayout.CENTER);Application.launch (Demo.class, null); 添加到我的 outerFX JPanels 自定义代码中。经过一些调试后,我以正确的顺序得到了它并且它起作用了。谢谢!
  • @Moonbeam 当然。但如果你给我一天的时间,我会做到的。 :D

标签: java swing desktop-application gui-builder javafx-2


【解决方案1】:

也许您应该阅读Integrating JavaFX into Swing Applications,然后相应地重构您的代码。


试试

public class Demo extends Application{
    private static JFXPanel javafxPanel;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                initAndShowGUI();
            }
        });
    }

    public static void initAndShowGUI() {
        JFrame frame = new JFrame("Swing application");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Create JavaFX panel.
        javafxPanel = new JFXPanel();
        frame.getContentPane().add(javafxPanel, BorderLayout.CENTER);

        // Create JavaFX scene.
        Application.launch (Demo.class, null);

        // Show frame.
        frame.pack();
        frame.setVisible(true);
    }

    @Override
    public void start (Stage mainStage) {
        // Add scene to panel
        javafxPanel.setScene(createScene());
    }

    private static Scene createScene() {
        Text text = new Text("Hello World");
        text.setFont(new Font(24));
        text.setEffect(new Reflection());

        BorderPane pane = new BorderPane();
        pane.setCenter(text);
        Scene scene = new Scene(pane);

        return scene;
    }
}

在创建场景时,此示例假定您包含的代码是有效的。

【讨论】:

    【解决方案2】:

    我试图将 JFXPanel 添加到 JPanel,这为我解决了问题,也可能对您有所帮助

    jpanel1.setLayout(new FlowLayout());
    

    【讨论】:

    • 我在调整 JPanel 大小时遇到​​了闪烁问题,这已解决。
    猜你喜欢
    • 2016-08-16
    • 2011-01-30
    • 1970-01-01
    • 2016-09-26
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    相关资源
    最近更新 更多