【问题标题】:How to insert an object of a .jar file into Scene Builder?如何将 .jar 文件的对象插入 Scene Builder?
【发布时间】: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


【解决方案1】:

控制台错误:

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

仅表示您没有将 GraphEditorContainer 的导入放在 FXML 文件中。类似的东西

<? import com.somecompany.somepackage.GraphEditorContainer ?>

在 FXML 文件的顶部附近(与其他导入一起),显然已为正确的包名称进行了编辑。

在控制器中,总是初始化@FXML-annotated字段是错误的,原因很明显,所以替换

@FXML
private GraphEditorContainer graphEditorContainer = new    GraphEditorContainer();

@FXML
private GraphEditorContainer graphEditorContainer ;

Adding a custom component to SceneBuilder 2.0 中介绍了在 SceneBuilder 中使用自定义(或第 3 方)控件

【讨论】:

  • 非常感谢!我将导入添加到 FXML(我编辑了我的帖子以显示它),但随后 FXML 加载了一个空的Tab,没有我想要的节点。正如@Dici 提到的,我认为将自定义组件添加到 SceneBuilder 与我的主要问题(在选项卡中插入节点)不同,你怎么看?感谢您提供关于此的页面,我一定会使用它!
猜你喜欢
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
  • 2013-09-22
  • 2014-10-30
  • 1970-01-01
  • 2016-08-16
  • 2019-08-08
  • 1970-01-01
相关资源
最近更新 更多