为什么不在JavaFX控制器中注入成员?

时间:2013-11-20 21:40:21

标签: java dependency-injection javafx fxml

我有以下FXML

<BorderPane fx:controller="mypackage.MainStage" id="BorderPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2">
  <bottom>
    <ToolBar>
      <items>
        <Slider id="slider" prefWidth="443.0" />
        <Label text="Record:" />
        <TextField prefWidth="46.0" />
        <Label text=" of " />
        <Label id="totalLabel" text="0" />
      </items>
    </ToolBar>
  </bottom>
  <center>
    <Pane id="mainPane" prefHeight="200.0" prefWidth="200.0" />
  </center>
  <top>
    <ToolBar>
      <items>
        <Button mnemonicParsing="false" text="Load more" />
      </items>
    </ToolBar>
  </top>
</BorderPane>

和以下控制器代码:

public class MainStage implements Initializable {

    @FXML
    private Pane mainPane;

    @FXML
    private Label totalLabel;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        totalLabel.setText("245");
    }

}

以及以下应用程序代码

public class MyClass extends Application
{

    @Override
    public void start(Stage stage) throws Exception {

        Parent root = FXMLLoader.load(getClass().getResource("MainStage.fxml"));

        Scene scene = new Scene(root);

        stage.setTitle("MyClass");
        stage.setScene(scene);
        stage.show();


    }

    public static void main( String[] args )
    {
        launch(args);
    }


}

如果我将断点设置为initialize()我看到它被调用,但成员是null

为什么不注射?

1 个答案:

答案 0 :(得分:8)

因为我使用id时使用fx:id标记。