0

I am trying to add a JFXPanel to my JFrame. I am using Netbeans and Netbeans' Swing GUI Builder. When I run it I do not get any errors and the JFrame is created successfully but the JFXPanel with the text does not appear.

Here is my code:

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;
  }
}

Why is it not working? Am I doing something wrong?

Dorothy
  • 2,842
  • 10
  • 33
  • 46
  • I never used JavaFX, but I always heard negative result by mixing Swing with JavaFX, search for that on tihs forum, NetBeans forum .. – mKorbel Jul 15 '11 at 16:14
  • @Dorothy, Did my answer help you at all? – Moonbeam Jul 18 '11 at 12:03
  • 1
    @Moonbeam Yes. I just implemented your code and it worked. Then I replaced the JFrame with my JFrame (NewJFrame) and added `outerFX.add(javafxPanel, BorderLayout.CENTER);` and `Application.launch (Demo.class, null);` to my outerFX JPanels custom code. After some debugging I got it in the right order and it worked. Thanks! – Dorothy Jul 18 '11 at 14:04
  • @Moonbeam Sure. But if you'd a given me a day I would have done it. :D – Dorothy Jul 18 '11 at 14:33

2 Answers2

3

Perhaps you should read Integrating JavaFX into Swing Applications, and then refactor your code accordingly.


Try

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;
    }
}

When creating a scene, this example assumes that the code you've included is valid.

Moonbeam
  • 2,283
  • 1
  • 15
  • 17
2

I was trying to add JFXPanel to JPanel and this solved the problem for me, might help you as well

jpanel1.setLayout(new FlowLayout());
Usama Moin
  • 213
  • 2
  • 12