ste*_*wpf 9 controller code-injection javafx-2 fxml
我有一个BorderPane(与MainController相关联),BorderPane的FXML用于在BorderPane <fx:include>的底部区域包含一个Label(带有控制器StatusBarController).不幸的是,StatusBarController没有注入到MainController类实例中,我无法理解为什么.
main.fxml:包含状态栏的BorderPane
<fx:root type="javafx.scene.layout.BorderPane" fx:id="borderPane" xmlns:fx="http://javafx.com/fxml" fx:controller="com.example.controllers.MainController">
<bottom>
<fx:include source="statusbar.fxml" />
</bottom>
</fx:root>
Run Code Online (Sandbox Code Playgroud)
statusbar.fxml:Label及其关联的控制器
<Label fx:id="statusbar" text="A label simulating a status bar" xmlns:fx="http://javafx.com/fxml" fx:controller="com.example.controllers.StatusBarController" />
Run Code Online (Sandbox Code Playgroud)
带有StatusBarController字段的MainController:
public class MainController
{
@FXML
private StatusBarController statusbarController; // PROBLEM HERE: I would expect the StatusBarController to be injected but this does not happen!
// Implementing Initializable Interface no longer required on JavaFX 2.2 according to
// http://docs.oracle.com/javafx/2/fxml_get_started/whats_new2.htm
// (I also tested this, the initialize() method is being called)
@SuppressWarnings("unused") // only called by the FXMLLoader
@FXML // This method is called by the FXMLLoader when initialization is complete
private void initialize() {
// initialize your logic here: all @FXML variables will have been injected
assert borderPane != null : "fx:id=\"borderPane\" was not injected: check your FXML file 'main.fxml'.";
System.out.println("MainController initialize()");
//statusbarController.setStatusText("Hello from MainController"); // PROBLEM HERE: this fails because statusbarController is not injected as expected
}
}
Run Code Online (Sandbox Code Playgroud)
并且应用程序的开始:
public void start(Stage primaryStage)
{
Parent root = null;
try {
root = FXMLLoader.load(getClass().getResource("/resources/main.fxml"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
primaryStage.setTitle("Demo");
primaryStage.setScene(new Scene(root, 800, 600));
primaryStage.show();
}
Run Code Online (Sandbox Code Playgroud)
我的样本的完整源代码可以在http://codestefan.googlecode.com/svn/trunk/SubcontrollerAccess/上找到.
所以问题是:为什么StatusBarController没有注入到MainController的statusbarController变量中?
谢谢你的提示!
Ser*_*nev 18
要使用@FXML您必须提供的标签fx:id.
更新你的main.fxml:
<bottom>
<fx:include fx:id="statusbar" source="statusbar.fxml" />
</bottom>
Run Code Online (Sandbox Code Playgroud)
之后你可以使用你的下一个常量MainController.java:
@FXML
Label statusbar; // node itself
@FXML
private StatusBarController statusbarController; // controller
Run Code Online (Sandbox Code Playgroud)
注意,这statusbarController不是一个部分小写的类名,而是fx:id+ Controllerword.
| 归档时间: |
|
| 查看次数: |
7375 次 |
| 最近记录: |