如何从另一个FXML控制器获取一个Java FXML控制器中的数据(这些控制器不是嵌套控制器)? [英] How to get data in one Java FXML Controller from another FXML Controller (these controllers are not nested controllers)?

查看:568
本文介绍了如何从另一个FXML控制器获取一个Java FXML控制器中的数据(这些控制器不是嵌套控制器)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在一个FXML中有一个按钮,在另一个FXML中有两个文本字段。这两个FXML是独立的,我的意思是它们不是嵌套的。我想在按钮中单击时在控制台/输出中打印文本(位于两个文本字段中)。以下是fxmls及其控制器:

I have one button in one FXML and two text fields in another FXML. These two FXMLs are independent, I mean they are not nested. I want to print the text (which are in the two text fields) in the console/output whenever there is a click in the button. Below are the fxmls and their controllers:

Button.fxml

Button.fxml

    <AnchorPane id="AnchorPane" prefHeight="200.0" prefWidth="320.0" xmlns:fx="http://javafx.com/fxml" fx:controller="textboxandbuttonbinding.ButtonController">
      <children>
         <Button fx:id="button" layoutX="126.0" layoutY="90.0" onAction="#handleButtonAction" text="Button" />
      </children>
    </AnchorPane>

ButtonController.java

ButtonController.java

    public class ButtonController implements Initializable {

        @FXML
        private void handleButtonAction(ActionEvent event) {

        }

        @Override
        public void initialize(URL url, ResourceBundle rb) {

        }    
    }

Text.fxml

Text.fxml

    <AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="textboxandbuttonbinding.Sample1111Controller">
       <children>
           <TextField fx:id="textField1" layoutX="186.0" layoutY="133.0" prefWidth="200.0" promptText="text 1" />
           <TextField fx:id="textField2" layoutX="186.0" layoutY="200.0" prefWidth="200.0" promptText="text2" />
       </children>
    </AnchorPane>

TextController.java

TextController.java

    public class TextController implements Initializable {
        @FXML
        private TextField textField1;
        @FXML
        private TextField textField2;

        @Override
        public void initialize(URL url, ResourceBundle rb) {

        }    
    }

如何实现此功能?我考虑到这两个FXML是在两个不同的窗口同时加载的。

How can I achieve this functionality? I have taken into consideration that these two FXMLs are loaded at the same time as two different windows.

推荐答案

上面有一些修改回答(通过SnakeDoc),我能够实现功能。

With some modification in above answer (by SnakeDoc), i am able to achieved the functionality.

我创建了一个单独的Singleton类:

I have created a separate Singleton class:

Singleton.java

Singleton.java

    public class Singleton {
        private static Singleton instance = new Singleton();
        public static Singleton getInstance(){
            return instance;
        }

        private TextField txtField1;
        private TextField txtField2;

        public TextField getTxtField2() {
            return txtField2;
        }

        public void setTxtField2(TextField txtField2) {
           this.txtField2 = txtField2;
        }

        public TextField getTxtField1() {
           return txtField1;
        }

       public void setTxtField1(TextField txtField1) {
           this.txtField1 = txtField1;
       }

    }

文本字段在初始化方法。

The text fields are set in the initialize method.

TextController.java

TextController.java

    public class TextController implements Initializable {

       @FXML
       private TextField textField1;

       @FXML
       private TextField textField2;

       @Override
       public void initialize(URL url, ResourceBundle rb) {
            Singleton.getInstance().setTxtField1(textField1);
            Singleton.getInstance().setTxtField2(textField2);
       }    
    }

在ButtonController.java类中调用getter方法

The getter methods are called in the class ButtonController.java

ButtonController.java

ButtonController.java

    public class ButtonController implements Initializable {    

        @FXML
        private void handleButtonAction(ActionEvent event) {
            String str1 = Singleton.getInstance().getTxtField1().getText();
            String str2 = Singleton.getInstance().getTxtField2().getText();

            System.out.println(str1);
            System.out.println(str2);

        }

        @Override
        public void initialize(URL url, ResourceBundle rb) {

        }    
    }

这篇关于如何从另一个FXML控制器获取一个Java FXML控制器中的数据(这些控制器不是嵌套控制器)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆