簡體   English   中英

更改在不同場景中輸入的新場景中的標簽文本(javafx)

[英]Change label text in a new scene which was entered in different scene (javafx)

我正在嘗試更改標簽中的文本,這是在不同場景中的文本字段中輸入的文本。 我制作了2個FXML文件,第一個包含一個textfield和“ok”按鈕,第二個包含一個標簽(帶有文本“Label”)。 我的目標是在文本字段中輸入文本,當我按“確定” - >打開新場景時,標簽會將其文本更改為我在文本字段中輸入的文本。 當標簽,文本字段和ok按鈕都在同一個場景中時,我很容易更改標簽文本,但是當我在打開新場景時這樣做我失敗了...經過一些研究,我為每個FXML文件制作了一個控制器,以及將在它們之間進行通信的“MainController”。 這是我的主要課程:

public class MainBanana extends Application {


@Override
public void start(Stage primaryStage) throws IOException {

    Parent root = FXMLLoader.load(getClass().getResource("view/Welcome.fxml"));
    Scene scene = new Scene(root);
    primaryStage.setTitle("MokaApp");
    primaryStage.setScene(scene);
    primaryStage.show();
    primaryStage.setResizable(false);



}

public static void main(String[] args) {
    launch(args);

}

}

我的第一個場景控制器

public class WelcomeController {

@FXML
public TextField nameField;
@FXML
private Button okButton;

private MainController main;


@FXML
public void okClicked(ActionEvent event) throws IOException{



    Parent root = FXMLLoader.load(getClass().getResource("Person.fxml"));
    okButton.getScene().setRoot(root);
    System.out.println(nameField.getText());
    main.setLblFromTf(nameField.getText());


}


    public void init(MainController mainController) {
        main=mainController;

    }

}

第二場景控制器:

public class PersonController {

@FXML
public Label nameLabel;

private MainController main;


public void init(MainController mainController) {
    main=mainController;

}

}

當我啟動程序時,打開歡迎場景,我在文本字段輸入文本,但每當我按下“確定”按鈕時,場景就會變為第二個場景,但標簽文本保持不變(標簽)和我在此行上獲取nullpointerexception錯誤(位於WelcomeController中):main.setLblFromTf(nameField.getText());

對不起,長篇帖子..

您不需要在整個地方引用MainController

最簡單的方法是:

public class PersonController {

    @FXML
    private Label nameLabel ;

    public void setName(String name) {
        nameLabel.setText(name);
    }
}

那你可以做

public class WelcomeController {

    @FXML
    private TextField textField ;

    @FXML
    private Button okButton ;

    @FXML
    public void okClicked() throws IOException {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("Person.fxml"));
        Parent root = loader.load();
        PersonController personController = loader.getController();
        personController.setName(textField.getText());
        okButton.getScene().setRoot(root);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM