gpt4 book ai didi

java - 在不同场景中输入的新场景中更改标签文本(javafx)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:09 25 4
gpt4 key购买 nike

我正在尝试更改标签中的文本,该文本是在不同场景的文本字段中输入的。我制作了 2 个 FXML 文件,第一个包含一个文本字段和“确定”按钮,第二个包含一个标签(带有文本“Label”)。我的目标是在文本字段中输入文本,当我按“确定”-> 打开新场景时,标签会将其文本更改为我在文本字段中输入的文本。当标签、文本字段和确定按钮都在同一个场景中时,我很容易更改标签文本,但是当我在打开一个新场景时这样做时,我失败了……经过一些研究,我为每个 FXML 文件制作了一个 Controller ,以及一个将在它们之间进行通信的“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);

}

我的第一个场景 Controller :

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;

}

第二个场景 Controller :

public class PersonController {

@FXML
public Label nameLabel;

private MainController main;


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

}

}

当我启动程序时,欢迎场景打开,我在文本字段中输入文本,但每当我按下“确定”按钮时,场景就会切换到第二个场景,但标签文本保持不变(标签) 并且我在这一行(位于 WelcomeController 中)收到一个 nullpointerexception 错误: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);
}
}

关于java - 在不同场景中输入的新场景中更改标签文本(javafx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32147304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com