Is it possible to make JavaFX web applet?
Asked Answered
J

2

8

I like old Java applets. But because I really like the way JFX works, I want write some games using it (or even game making system, who knows?), but I'd like to be able to post them on my website. How would one go about doing this?

Joyner answered 19/12, 2011 at 20:0 Comment(0)
M
4

Yes, you should be able to embed JavaFX in your web page:

http://docs.oracle.com/javase/8/docs/technotes/guides/deploy/deployment_toolkit.html#BABJHEJA

http://docs.oracle.com/javase/8/javase-clienttechnologies.htm

Mussorgsky answered 19/12, 2011 at 20:32 Comment(1)
Wouldn't hurt to show an example. What if links don't function?Groundmass
R
4

Yes, you can embed a JavaFX GUI into the Swing-based JApplet. You can do this by using the JFXPanel - it is essentially an adaptor between Swing and JavaFX panels.

Complete example:
The FXApplet class that sets-up the JavaFX GUI:

public class FXApplet extends JApplet {
    protected Scene scene;
    protected Group root;

    @Override
    public final void init() { // This method is invoked when applet is loaded
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                initSwing();
            }
        });
    }

    private void initSwing() { // This method is invoked on Swing thread
        final JFXPanel fxPanel = new JFXPanel();
        add(fxPanel);

        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                initFX(fxPanel);
                initApplet();
            }
        });
    }

    private void initFX(JFXPanel fxPanel) { // This method is invoked on JavaFX thread
        root = new Group();
        scene = new Scene(root);
        fxPanel.setScene(scene);
    }

    public void initApplet() {
        // Add custom initialization code here
    }
}

And a test implementation for it:

public class MyFXApplet extends FXApplet {
    // protected fields scene & root are available

    @Override
    public void initApplet() {
        // this method is called once applet has been loaded & JavaFX has been set-up

        Label label = new Label("Hello World!");
        root.getChildren().add(label);

        Rectangle r = new Rectangle(25,25,250,250);
        r.setFill(Color.BLUE);
        root.getChildren().add(r);
    }
}

Alternatively, you can use the FXApplet gist, which also includes some documentation.

Ruthy answered 1/11, 2014 at 12:22 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.