首页 文章

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

提问于
浏览
2

我正在尝试更改标签中的文本,这是在不同场景中的文本字段中输入的文本 . 我制作了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());

对不起,长篇帖子..

1 回答

  • 2

    您不需要在整个地方引用 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);
        }
    }
    

相关问题