我正在尝试在Java FX中填充文本字段的值。
我有Main Class,controller和fxml。我已经将fxml文件与controller和其中的适当字段绑定在一起。当我尝试设置其值时,它会失败。
Main.java
import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.FlowPane; import javafx.stage.Stage; public class Main extends Application { private Stage primaryStage; private FlowPane rootLayout; @Override public void start(Stage primaryStage) { try { FXMLLoader loader = new FXMLLoader(); loader.setLocation(Main.class.getResource("test.fxml")); rootLayout = (FlowPane) loader.load(); Scene scene = new Scene(rootLayout); primaryStage.setScene(scene); primaryStage.show(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); } }
testController.java
package application; import javafx.fxml.FXML; import javafx.scene.control.TextField; public class testController { @FXML private TextField t1; public testController() { System.out.println("hi"); t1 = new TextField("j"); t1.setText("hi"); } }
FXML文件:
<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.layout.FlowPane?> <FlowPane prefHeight="200.0" prefWidth="200.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.testController"> <children> <TextField fx:id="t1" /> </children> </FlowPane>
您在错误的位置进行操作!如果您需要在加载fxml之前使用控件,则需要在中进行操作initialize()。为此,您的控制器应实施Initializable
initialize()
Initializable
因此,您的控制器变为:
public class testController implements Initializable{ @FXML private TextField t1; public void initialize() { System.out.println("hi"); //You should not re-initialize your textfield //t1 = new TextField("j"); t1.setText("hi"); } }