如何在Java中使用setText更新FXML按钮-当它返回java.lang.NullPointerException错误时?

我对Java很陌生。我想使用一个类来更新按钮的文本,以便在调用该方法时相应地进行更新。我试图实现其他相关文章中的一些代码,但无法弄清楚。首先-您是否必须更新整个场景以更新按钮,还是像在更新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);
    }

}

类文件:

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){

   }
}
pb9999 回答:如何在Java中使用setText更新FXML按钮-当它返回java.lang.NullPointerException错误时?

Controller editButton = new Controller();
editButton.editButtonText("blabla selected");

问题在于那部分。用FXMLLoader加载fxml文件后,将自动创建一个新的控制器对象。您可以使用

访问该控制器对象
Controller editButton = (Controller) loader.getController`

否则,您引用的是没有分配GUI的新Conctroller。

或者,您也可以将其写为:

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文件中设置控制器。

本文链接:https://www.f2er.com/3037751.html

大家都在问