如何将.jar文件的对象插入到Scene Builder中?

时间:2016-08-06 23:40:15

标签: java javafx jar scenebuilder

我正在为我的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);

如果有可能,你可以帮助我吗?

谢谢

1 个答案:

答案 0 :(得分:0)

控制台出错:

  

javafx.fxml.LoadExceptionGraphEditorContainer不是有效类型。

只是意味着您没有将GraphEditorContainer的导入放在FXML文件中。像

这样的东西
<? import com.somecompany.somepackage.GraphEditorContainer ?>

靠近FXML文件的顶部(使用其他导入),显然是为正确的包名编辑的。

在控制器中,由于显而易见的原因,始终错误地初始化@FXML - 带注释的字段,因此请替换

@FXML
private GraphEditorContainer graphEditorContainer = new    GraphEditorContainer();

@FXML
private GraphEditorContainer graphEditorContainer ;

Adding a custom component to SceneBuilder 2.0

中介绍了在SceneBuilder中使用自定义(或第三方)控件