【问题标题】:Eclipse RCP 4 + JavaFX - How to load Scene saved as FXMLEclipse RCP 4 + JavaFX - 如何加载保存为 FXML 的场景
【发布时间】:2016-12-18 13:27:43
【问题描述】:

我想将我的基于 SWT 应用程序的 Eclipse RCP 3.x 切换到 Eclipse RCP 4.x 和 JavaFX,但我很难通过神奇的@statements 和... Eclipse RCP 中的 JavaFx。

我遇到的问题是从一个 FX 场景切换到另一个。我不知道如何获得JavaFX初级阶段,代码:

private void load()
{
    try {
    Stage primaryStage = Facade.PrimaryStage;
    StackPane page = (StackPane) FXMLLoader.load(getClass().getResource(_fxmlPath));
    Scene scene = new Scene(page);
    primaryStage.setScene(scene);
    primaryStage.setTitle("FXML is Simple");
    primaryStage.show();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

如果有任何工作示例如何初始化变量,我将不胜感激:

Stage primaryStage

或者也许还有其他方法可以切换 FX 场景?

由于在 Eclipse RCP 4.x 中如何使用 JavaFX 的示例并不多(我觉得这些甚至都不能与最新的 Eclipse SDK + JavaFX 一起使用),这种环境是否适合从 Eclipse RCP 3.x 切换或只是“概念证明”吗?

【问题讨论】:

    标签: java eclipse javafx rcp


    【解决方案1】:

    JavaFX 上的 e4 已投入生产,但我不确定您要实现什么目标!你看过样本吗 - 见https://wiki.eclipse.org/Efxclipse/Tutorials

    【讨论】:

    • 是的,我的 Eclipse IDE 中有来自 Tutorial nr 3 的示例项目,但我的项目包含多个视图/场景,因此我需要切换场景(并将所有控件保留在内存,以防有人将其切换回来)。您能否提供任何示例如何切换以及是否可以以某种方式将 FXML 文件加载为场景?
    • 好的,我有 JavaFx 的初级阶段(你在这里回答了类似的问题:stackoverflow.com/questions/38033363/…),但仍然不知道如何在 Eclipse RCP 中解析 FXML 的路径:FXMLLoader.load(getClass( ).getResource(_fxmlPath))
    • 好吧 - 我再说一遍,我认为根本不需要切换场景内容,无论如何在 osgi 中加载 fxml 有点棘手 - wiki.eclipse.org/Efxclipse/Runtime/Recipes#.40FXMLLoader - 上面的代码使用相对路径到 getClass() 所以在不知道您的项目布局和 _fxmlPath 的内容的情况下,我们无能为力
    • 嗯...好的,所以在 Eclipse RCP 3.x 中,我将这些“视图”作为透视图,然后我只需切换透视图。我可以在 JavaFx 和 EclipseRCP 4.x 中做同样的事情吗?
    • 肯定只是在e4xmi文件中创建透视图,使用EPartService切换
    【解决方案2】:

    好的,其实我已经找到了解决方案:

    1. 在 Application.e4xmi 中创建部件
    2. 将下面的代码添加到部件中,该代码由 *.fxml 中的 JavaFx 控件填充:

      @PostConstruct
      void init(@org.eclipse.fx.ui.di.FXMLLoader FXMLLoaderFactory pFactory, BorderPane pPane, MPart pPart) {
      try
      {
          FXMLBuilder<Node> lBuilder = pFactory.loadRequestorRelative("/scenes/SceneA.fxml");
          _mainControl = lBuilder.load();
          pPane.setCenter(_mainControl);
      }catch(Exception e)
      {
          e.printStackTrace();
      }
      

      }

    (*不要忘记将包含所有 *.fxml 文件的文件夹添加到 META-INF/MANIFEST.MF,因为当您尝试创建应用程序导出/构建时,您会因错误而感到惊讶)

    【讨论】:

      猜你喜欢
      • 2016-07-17
      • 2022-01-09
      • 2019-07-14
      • 1970-01-01
      • 2015-09-08
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多