2016-03-15 70 views
0

出于某种原因,我无法将定义在FXML文件中的节点加载到我的实例变量中。我做了这两个测试文件:JavaFX - 无法从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被打印出来null时,他们应该已经注入在FXML文件中定义节点时,有人知道这里有什么问题吗?当我在Scene Builder中编辑FXML文件时,控制器类和字段都会被找到并识别,所以应该没有任何问题。

回答

1

FXMLLoader.load创建Test类的新实例。 所以这不会和你现在的课程一样。

使用FXMLLoader类的setControllerFactory方法来更改此行为。