Is it possible to make JavaFX web applet?

前端 未结 2 625
时光说笑
时光说笑 2021-01-12 06:18

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

2条回答
  •  隐瞒了意图╮
    2021-01-12 07:15

    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.

提交回复
热议问题