Ant*_*llo 27 controller nested javafx include fxml
在这个 tutotial中,是一个如何包含自定义组件并使用来自容器控制器的控制器的示例.
main_window_content.fxml
<VBox fx:controller="com.foo.MainController">
<fx:include fx:id="dialog" source="dialog.fxml"/>
...
</VBox>
Run Code Online (Sandbox Code Playgroud)
MainController.java
public class MainController extends Controller {
@FXML private Window dialog;
@FXML private DialogController dialogController;
..
Run Code Online (Sandbox Code Playgroud)
如果组件只包含一次,它可以正常工作.如果包含两次相同的组件,则不会初始化控制器.两个控制器都为空.
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>
Run Code Online (Sandbox Code Playgroud)
MainController.java
public class MainController extends Controller {
@FXML private Window dialog1;
@FXML private DialogController dialogController1;
@FXML private Window dialog2;
@FXML private DialogController dialogController2;
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决问题吗?谢谢
这是我的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();
}
Run Code Online (Sandbox Code Playgroud)
小智 36
感谢Daniel(来自OTN)我在代码中发现错误,我的控制器变量的名称是错误的.他们应该<fx:id>Controller.换句话说它应该是:
MainController.java
public class MainController extends Controller {
@FXML private Window dialog1;
@FXML private DialogController dialog1Controller;
@FXML private Window dialog2;
@FXML private DialogController dialog2Controller;
Run Code Online (Sandbox Code Playgroud)
但是研究2.2版本中引入的更改后,我发现使用<fx:root>标记(如本教程)可以很容易地解决所有问题.我在FXML中输入我的组件只是声明它是这样的:
<HBox>
<Dialog id="dialog1" text="Hello World!"/>
<Dialog id="dialog2" text="Hello World!"/>
</HBox>
Run Code Online (Sandbox Code Playgroud)
我希望能有所帮助
| 归档时间: |
|
| 查看次数: |
30842 次 |
| 最近记录: |