2016-03-15 103 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方法來更改此行爲。