[英]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.