Java:在轻量级中嵌入重量级组件(JavaFX SwingNode)

时间:2014-07-01 14:39:25

标签: java applet javafx embed

我一直在开发一个JavaFX应用程序,我需要将Applet嵌入其中。这个问题有already been asked;但是,就这个问题给出的答案是不够的。我无法访问applet,我只是将其从服务器(在这种情况下是游戏服务器)下载并尝试在桌面上作为我自己的自定义客户端运行它。所以我不能改变那方面的任何事情。我可以使用swing单独执行此操作,但在嵌入JavaFX应用程序的SwingNode时则不行。我花了几天时间阅读它并且我理解了无法将重量级组件放入SwingNode并依赖它们工作的问题。但是,如果有任何意愿,总有办法。

我目前使用的代码:

@Override
public void start(Stage primaryStage) {
    primaryStage.setTitle("GameClient");

    //Game launcher
    Launcher launcher = new Launcher();

    SwingNode swingNode = new SwingNode();
    SwingUtilities.invokeLater(() -> swingNode.setContent(launcher.getGameClientWrappedInJPanel()));

    //HBox because I also want to add another component off to the side of the game
    Scene scene = new Scene(new HBox());
    ((HBox)scene.getRoot()).getChildren().add(swingNode);

    primaryStage.setScene(scene);
    primaryStage.sizeToScene();
    primaryStage.show();
}

public static void main(String[] args) {
    launch(args);
}

此外,欢迎所有建议,但请记住,这都是测试设置;所以像启动器在构造函数中下载和初始化客户端这样的事情只是暂时的解决方法。

长话短说,我想知道是否有人能够就如何处理这个问题给我任何建议。 (基本上是在轻量级组件中正确渲染重量级的黑客攻击)我考虑在Swing中编写整体gui,并且只使用JFXPanels作为FX组件,但是如果有任何黑客攻击我可以用于我的原始目标;它会更方便。

谢谢

-Thomas

0 个答案:

没有答案