从JFrame启动JavaFxApplication

时间:2016-03-12 16:59:25

标签: java javafx

我在JavaFx中编写了一个显示旋转RGB立方体的应用程序。在JFrame中选择JMenuBar中的选项后,我不会运行此应用程序。我尝试过这样的事情:

java.lang.RuntimeException: Error: class grafika1.MyMenu is not a subclass of javafx.application.Application

但它抛出:

parser.add_argument("--nb", help="show number", action='store_true')
parser.add_argument("--md", help="Create xyz file", action='store_true')
parser.add_argument("--xsf", help="Create xsf file for md(default is xyz)"
                    , action='store_true')

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

你可以做到

Application.launch(CubeDemo.class);

但请注意,您只能在JVM的生命周期内执行launch(...)一次(因此,如果用户再次选择您的菜单项,则会抛出异常)。

如果要在swing应用程序中显示JavaFX用户界面,支持的方法是使用JFXPanel,您可以直接将其放入JFrame。所以你会做类似的事情:

public class CubeDemo {

    private final Parent view ;

    public CubeDemo() {
        view = new BorderPane(); // or any other kind of pane...
        // set up ui, register event handlers, etc etc
    }

    public Parent getView() {
        return view ;
    }
}

您仍然可以使用:

制作独立的JavaFX应用程序(如果需要)
public class CubeDemoApp extends Application {
    @Override
    public void start(Stage primaryStage) {
        CubeDemo cubeDemo = new CubeDemo();
        Scene scene = new Scene(cubeDemo.getView());
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

在您的Swing应用程序中,您可以执行以下操作:

JFXPanel jfxPanel = new JFXPanel();
JFrame frame = new JFrame();
frame.add(jfxPanel);
frame.setSize(...);
Platform.runLater(() -> {
    CubeDemo cubeDemo = new CubeDemo();
    Scene scene = new Scene(cubeDemo.getView());
    jfxPanel.setScene(scene);
});
frame.setVisible(true);