我正在为我的Masters编写一个模拟软件,它包含一个“图形容器”,您可以根据我链接的方式链接节点以生成方程式。这些方程式将使我能够模拟我的模型。我使用Java 8和JavaFX,使用Scene Builder和FXML。
在网上搜索,我找到了图形编辑器(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
函数(下面的代码)中绘制节点,但不在Tab中。
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);
如果有可能,你可以帮助我吗?
谢谢
答案 0 :(得分:0)
控制台出错:
javafx.fxml.LoadException
:GraphEditorContainer
不是有效类型。
只是意味着您没有将GraphEditorContainer
的导入放在FXML文件中。像
<? import com.somecompany.somepackage.GraphEditorContainer ?>
靠近FXML文件的顶部(使用其他导入),显然是为正确的包名编辑的。
在控制器中,由于显而易见的原因,始终错误地初始化@FXML
- 带注释的字段,因此请替换
@FXML
private GraphEditorContainer graphEditorContainer = new GraphEditorContainer();
与
@FXML
private GraphEditorContainer graphEditorContainer ;
中介绍了在SceneBuilder中使用自定义(或第三方)控件