由于某种原因,我无法将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>
当TextArea
和Label
应该注入FXML文件中定义的节点时,null
和ast.literal_eval
都打印为input()
,有人知道这里有什么问题吗?当我在Scene Builder中编辑FXML文件时,可以找到并识别控制器类和字段,因此不应该有任何问题。
答案 0 :(得分:1)
FXMLLoader.load创建Test类的新实例。 所以这与你现在的班级不一样。
使用FXMLLoader类的setControllerFactory方法来改变这种行为。