【问题标题】:JavaFx Nested Controllers (FXML <include>)JavaFx 嵌套控制器 (FXML <include>)
【发布时间】:2012-09-14 15:23:12
【问题描述】:

this tutotial 中,是一个如何包含自定义组件并从容器的控制器中使用它们的控制器的示例。

main_window_content.fxml

<VBox fx:controller="com.foo.MainController">
   <fx:include fx:id="dialog" source="dialog.fxml"/>
   ...
</VBox>

MainController.java

public class MainController extends Controller {
    @FXML private Window dialog;
    @FXML private DialogController dialogController;

    ..

如果该组件只包含一次,它可以正常工作。 如果相同的组件被包含两次,控制器不会被初始化。 两个控制器都是空的。

main_window_content.fxml

    <VBox fx:controller="com.foo.MainController">
       <fx:include fx:id="dialog1" source="dialog.fxml"/>
       <fx:include fx:id="dialog2" source="dialog.fxml"/>
       ...
    </VBox>

MainController.java

    public class MainController extends Controller {
        @FXML private Window dialog1;
        @FXML private DialogController dialogController1;
        @FXML private Window dialog2;
        @FXML private DialogController dialogController2;

有人可以帮我解决这个问题吗? 谢谢

这是我的 FXML 加载代码。它在主应用程序方法中执行:

public void start(Stage stage) throws Exception { 
    Parent root = FXMLLoader.load(getClass().getResource("main_window_content.fxml"));
    stage.setTitle("FXML Welcome"); 
    stage.setScene(new Scene(root, 300, 275));
    stage.show(); 
}

【问题讨论】:

  • 第二个答案是这个问题的正确答案,应该标记为“已接受”
  • @AmirArad “第二个”是哪一个?

标签: controller include nested javafx fxml


【解决方案1】:

感谢 Daniel(来自 OTN)我在我的代码中发现了错误,我的控制器变量的名称是错误的。他们应该是&lt;fx:id&gt;Controller。 换句话说,它应该是:

MainController.java

public class MainController extends Controller {
@FXML private Window dialog1;
@FXML private DialogController dialog1Controller;
@FXML private Window dialog2;
@FXML private DialogController dialog2Controller;

但是研究了2.2版本中引入的changes,发现使用&lt;fx:root&gt;标签可以轻松解决一切 (like this tutorial)。 我在 FXML 中输入了我的组件,只是像这样声明它:

<HBox>
    <Dialog id="dialog1" text="Hello World!"/>
    <Dialog id="dialog2" text="Hello World!"/>
</HBox>

希望对你有所帮助

【讨论】:

  • 另外,将您自己的答案标记为已接受,以使其更明显地成为您问题的解决方案。只需单击此答案旁边的勾号即可。
【解决方案2】:

netbeans 8.0 中似乎也存在嵌套 fxml 的错误。不能指望 netbeans 为您创建嵌套的 fxml 的控制器对象,它必须手动插入到您的 MainController 中。每次在 netbeans 中更新控制器时,它都会被清除,因此可能有点乏味。 对于此示例,将插入

@FXML private DialogController dialog1Controller;

在这种情况下手动插入主控制器,然后它就可以正常工作了。对于组织大型 fxmls/控制器非常有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 2013-07-22
    相关资源
    最近更新 更多