如何在 java 中使用 setText 更新 FXML 按钮 - 当出现 returns java.lang.NullPointerException 错误时?
How to update FXML button using setText in java - when it returns java.lang.NullPointerException error?
我是 java 的新手。我想使用 class 更新按钮的文本,因此当调用该方法时它会相应地更新。我试图实现其他相关帖子中的一些代码,但无法弄清楚。首先 - 你是否必须更新整个场景才能更新按钮,或者它是否像反应一样工作,它更新了 DOM 的部分?
目标是在加载场景时更新按钮的文本。
FXML 文件:
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="project.Controller">
<Button fx:id="button" text="STOP"></Button>
</AnchorPane>
主要 Java 文件:
public class project extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(project.class.getResource("index.fxml"));
Parent root = loader.load();
Scene scene = new Scene(root, 1200, 750);
primaryStage.setScene(scene);
primaryStage.show();
Controller editButton = new Controller();
editButton.editButtonText("blabla selected");
} catch (Exception e){
System.out.println(e);
}
}
public static void main(String[] args) {
launch(args);
}
}
Class 文件:
public class Controller implements Initializable
{
//FXML
@FXML public Button button;
@FXML
public void editButtonText(String text){
// button = new Button();
button.setText(text);
}
@Override
public void initialize(URL url, ResourceBundle r){
}
}
Controller editButton = new Controller();
editButton.editButtonText("blabla selected");
问题是那部分。使用 FXMLLoader 加载 fxml 文件后,将自动创建一个新的控制器对象。您可以使用
访问该控制器对象
Controller editButton = (Controller) loader.getController`
否则你引用了一个新的 Conctroller,它没有分配给它的 GUI。
或者,您也可以将其写为:
Controller controller = new Controller();
FXMLLoader loader = new FXMLLoader();
loader.setLocation(project.class.getResource("index.fxml"));
loader.setController(controller);
Parent root = loader.load()
这样,您新创建的 Controller 对象就被设置为您要加载的 fxml 文件的 FXMLController。 注意:要使此功能正常工作,不能在 fxml 文件中设置控制器。
我是 java 的新手。我想使用 class 更新按钮的文本,因此当调用该方法时它会相应地更新。我试图实现其他相关帖子中的一些代码,但无法弄清楚。首先 - 你是否必须更新整个场景才能更新按钮,或者它是否像反应一样工作,它更新了 DOM 的部分?
目标是在加载场景时更新按钮的文本。 FXML 文件:
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="project.Controller">
<Button fx:id="button" text="STOP"></Button>
</AnchorPane>
主要 Java 文件:
public class project extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(project.class.getResource("index.fxml"));
Parent root = loader.load();
Scene scene = new Scene(root, 1200, 750);
primaryStage.setScene(scene);
primaryStage.show();
Controller editButton = new Controller();
editButton.editButtonText("blabla selected");
} catch (Exception e){
System.out.println(e);
}
}
public static void main(String[] args) {
launch(args);
}
}
Class 文件:
public class Controller implements Initializable
{
//FXML
@FXML public Button button;
@FXML
public void editButtonText(String text){
// button = new Button();
button.setText(text);
}
@Override
public void initialize(URL url, ResourceBundle r){
}
}
Controller editButton = new Controller();
editButton.editButtonText("blabla selected");
问题是那部分。使用 FXMLLoader 加载 fxml 文件后,将自动创建一个新的控制器对象。您可以使用
访问该控制器对象Controller editButton = (Controller) loader.getController`
否则你引用了一个新的 Conctroller,它没有分配给它的 GUI。
或者,您也可以将其写为:
Controller controller = new Controller();
FXMLLoader loader = new FXMLLoader();
loader.setLocation(project.class.getResource("index.fxml"));
loader.setController(controller);
Parent root = loader.load()
这样,您新创建的 Controller 对象就被设置为您要加载的 fxml 文件的 FXMLController。 注意:要使此功能正常工作,不能在 fxml 文件中设置控制器。