【问题标题】:E4 RCP + GEF5 application implementationE4 RCP + GEF5 应用实施
【发布时间】:2017-10-27 11:50:53
【问题描述】:

我想构建基于 GEF5 的句子可视化器,其界面将分为两部分:

  1. 输入部分 - 您可以在其中放置句子,
  2. 输出部分,将显示 GEF5 图

组织这些部分的最简单方法是使用 E4 RCP,因为它们可以有单独的 javafx..Panes

这是交易,E4 RCP 使用部件作为分离的 javafx..BorderPanes

public class DictionaryPart {
    @PostConstruct
    void initUI(BorderPane pane) {
        try {
            TextArea textbox = new TextArea();
            pane.setCenter(textbox);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

然而,GEF5 示例包括使用 javafx..Stage 和 IViewer 接口的简单应用程序实现。

public void start(final Stage primaryStage) throws Exception {
        // create graph
        graph = createGraph();

        // configure application
        Injector injector = Guice.createInjector(createModule());
        domain = injector.getInstance(IDomain.class);
        viewer = domain.getAdapter(
                AdapterKey.get(IViewer.class, IDomain.CONTENT_VIEWER_ROLE));
        primaryStage.setScene(createScene(viewer));

        primaryStage.setResizable(true);
        primaryStage.setWidth(getStageWidth());
        primaryStage.setHeight(getStageHeight());
        primaryStage.setTitle(title);
        primaryStage.show();

        // activate domain only after viewers have been hooked
        domain.activate();

        // set contents in the JavaFX application thread because it alters the
        // scene graph
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                viewer.getContents().setAll(Collections.singletonList(graph));
            }
        });
    }

    protected Scene createScene(IViewer viewer) {
        return new Scene(((IViewer) viewer).getCanvas());
    }

当我只需要一个窗格时,我的第二堂课中描述 Part 的这段代码会在我的应用程序前面显示 Stage。

我只是不明白如何正确实现 GEF5 到 E4?除了 GEF 文档,还有其他教程吗?

UPD:找到了一个将 GEF4 MVC Logo 示例转换为 e4 RCP 应用程序,但已经过时了。

【问题讨论】:

    标签: java javafx eclipse-rcp e4 eclipse-gef


    【解决方案1】:

    强迫它像那样工作:

    @PostConstruct
    void initUIPane(BorderPane pane){
        graph = createGraph();
        // configure application
        Injector injector = Guice.createInjector(createModule());
        domain = injector.getInstance(IDomain.class);
        viewer = domain.getAdapter(AdapterKey.get(IViewer.class, IDomain.CONTENT_VIEWER_ROLE));
        InfiniteCanvas canvas = (InfiniteCanvas)viewer.getCanvas();
        pane.setCenter(canvas);
        canvas.sceneProperty().addListener((observable, oldValue, newValue) -> {
          if (canvas.getScene() != null) {
            domain.activate();
            try {
                viewer.getContents().setAll(Collections.singletonList(graph));
            } catch (Exception e) {
              e.printStackTrace();
            }
          }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 2014-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多