【发布时间】:2016-12-13 01:45:26
【问题描述】:
我正在为我的硕士课程编写一个模拟软件,它包含一个“图形容器”,您可以在其中链接节点以根据我链接的内容生成方程式。然后,这些方程将使我能够模拟我的模型。为此,我使用 Java 8 和 JavaFX,以及 Scene Builder 和 FXML。
在网上搜索,我找到了 Graph-Editor (https://github.com/tesis-dynaware/graph-editor),它对我需要的东西有很大帮助。按照项目网站上的教程,我可以重现它并且它正在运行。但是在我的软件上,我不需要像教程那样创建一个新窗口来使用图表 - 相反,我想要一个 TabPane 使我能够创建我需要的尽可能多的模型,比如一个文本编辑器,如果我希望我可以将其保存在 XML 等...
我的问题是:我试图将教程中的图表放在他们在教程中所做的Tab 中(使用getView 方法),但它不起作用。我尝试了两种不同的方式,结果是一个空的Tab,没有节点,控制台上也没有错误。
第一次尝试
我尝试放入窗格并将GraphEditor 设置在窗格内。
我的java代码:
private GraphEditor graphEditor = new DefaultGraphEditor();
@FXML
private Pane graphEditorPane;
@FXML
public void initialize(){
graphEditorPane = new Pane(graphEditor.getView());
GModel model = GraphFactory.eINSTANCE.createGModel();
graphEditor.setModel(model);
addNodes(model);
}
我的 FXML 代码:
<TabPane tabClosingPolicy="UNAVAILABLE" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<tabs>
<Tab text="Modelo 1">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0">
<children>
<Pane fx:id="graphEditorPane" prefHeight="571.0" prefWidth="1000.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
</children>
</AnchorPane>
</content>
</Tab>
</tabs>
</TabPane>
第二种方式
我看过他们的演示源代码,我的理解是他们创建了他们的 GraphEditorContainer 对象的实例,然后他们的 FXML 文件有 GraphEditorContainer,但我的不是那样工作的。也许我理解他们做错了什么(我是 Java 和 JavaFX 的初学者)。
我的java代码:
private GraphEditor graphEditor = new DefaultGraphEditor();
@FXML
private GraphEditorContainer graphEditorContainer;
@FXML
public void initialize(){
graphEditorContainer = new GraphEditorContainer();
GModel model = GraphFactory.eINSTANCE.createGModel();
graphEditor.setModel(model);
graphEditorContainer.setGraphEditor(graphEditor);
addNodes(model);
}
我的 FXML 代码:
<?import de.tesis.dynaware.grapheditor.GraphEditorContainer?>
<TabPane tabClosingPolicy="UNAVAILABLE" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<tabs>
<Tab text="Modelo 1">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0">
<children>
<GraphEditorContainer fx:id="graphEditorContainer" minWidth="0" minHeight="0" maxWidth="+Infinity" maxHeight="+Infinity"/>
</children>
</AnchorPane>
</content>
</Tab>
</tabs>
</TabPane>
我可以将打开窗口并绘制节点的代码放在handleNew 函数中(代码如下),但不能放在选项卡中。
Stage secondaryStage = new Stage();
GraphEditor graphEditor = new DefaultGraphEditor();
Scene scene = new Scene(graphEditor.getView(), 800, 600);
secondaryStage.setScene(scene);
secondaryStage.show();
GModel model = GraphFactory.eINSTANCE.createGModel();
graphEditor.setModel(model);
addNodes(model);
如果可以的话,你能帮帮我吗?
谢谢
【问题讨论】:
-
这个问题的信息太多了,显然你有两个问题而不是一个问题。一个接一个地解决问题不是更清楚吗?另外,您是否首先让他们的演示在您的环境中运行?
-
你好,迪奇。实际上,我有一个问题需要解决,就是将节点放在选项卡中。这些只是我尝试解决同一问题的两种方法。我还是一个初学者,所以我不确定哪些信息有用,哪些没有,所以我选择将我所知道的一切都放在帖子中:) 好主意,我将尝试在 Eclipse 中使演示工作。
标签: java javafx jar scenebuilder