E4 RCP + GEF5 应用实施
E4 RCP + GEF5 application implementation
我想构建基于 GEF5 的句子可视化工具,其界面将包含 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());
}
我的第二个 class 描述部分的代码在我的应用程序前面调出舞台,当我只需要一个窗格时。
我只是不明白如何正确地将 GEF5 实施到 E4?除 GEF 文档外,是否有任何教程?
UPD:找到了一个将 GEF4 MVC Logo 示例转换为 e4 RCP 应用程序的示例,但它已过时。
强迫它这样工作:
@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();
}
}
});
}
我想构建基于 GEF5 的句子可视化工具,其界面将包含 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());
}
我的第二个 class 描述部分的代码在我的应用程序前面调出舞台,当我只需要一个窗格时。
我只是不明白如何正确地将 GEF5 实施到 E4?除 GEF 文档外,是否有任何教程?
UPD:找到了一个将 GEF4 MVC Logo 示例转换为 e4 RCP 应用程序的示例,但它已过时。
强迫它这样工作:
@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();
}
}
});
}