JavaFX - 无法从FXML文件加载节点

时间:2016-03-15 12:15:46

标签: java javafx fxml

由于某种原因,我无法将FXML文件中定义的节点加载到我的实例变量中。我已经制作了这两个测试文件:

Test.java:

public class Test extends Application {
    @FXML private TextArea ta;
    @FXML private Label l;

    public void start(Stage primaryStage) {
        Scene scene = null;
        try {scene = new Scene((BorderPane)FXMLLoader.load(Test.class.getResource("ChatServer.fxml")));}
        catch (IOException e) {}

        primaryStage.setScene(scene);
        primaryStage.setTitle("Chat Server");
        primaryStage.show();
        System.out.println(ta);
        System.out.println(l);
    }
}

FXML文件:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.text.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Test">
   <top>
      <Label fx:id="l" text="text" BorderPane.alignment="CENTER">
         <BorderPane.margin>
            <Insets bottom="10.0" top="10.0" />
         </BorderPane.margin>
         <font>
            <Font size="13.0" />
         </font>
      </Label>
   </top>
   <center>
      <TextArea fx:id="ta" editable="false" focusTraversable="false" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
   </center>
</BorderPane>

TextAreaLabel应该注入FXML文件中定义的节点时,nullast.literal_eval都打印为input(),有人知道这里有什么问题吗?当我在Scene Builder中编辑FXML文件时,可以找到并识别控制器类和字段,因此不应该有任何问题。

1 个答案:

答案 0 :(得分:1)

FXMLLoader.load创建Test类的新实例。 所以这与你现在的班级不一样。

使用FXMLLoader类的setControllerFactory方法来改变这种行为。