java - 如何从一个 Java FXML Controller 中从另一个 FXML Controller 获取数据(这些 Controller 不是嵌套 Controller )?

标签 java javafx-2 javafx viewcontroller fxml

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

按钮.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

    public class ButtonController implements Initializable {

        @FXML
        private void handleButtonAction(ActionEvent event) {

        }

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

        }    
    }

文本.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

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

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

        }    
    }

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

最佳答案

通过对上述答案(由 SnakeDoc 提供)进行一些修改,我能够实现该功能。

我创建了一个单独的 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;
       }

    }

文本字段在初始化方法中设置。

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 方法

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) {

        }    
    }

关于java - 如何从一个 Java FXML Controller 中从另一个 FXML Controller 获取数据(这些 Controller 不是嵌套 Controller )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19883563/

相关文章:

java - 无法使用 Java 9 启动 jmeter 3.3

javafx-2 - 添加选项卡图标会缩小选项卡的大小,并且不会显示完整的图标

java - 如何在 javaFX 中下载文件时让用户选择文件夹选项

javafx - 从 JavaFX Canvas 中删除抗锯齿形状

java - 删除空 javafx 表的默认 'no content in table' 文本

java - 我如何向我的 gwt 树提供数据

java - 制作两个选项窗口的最佳方法是什么?

java - 是否可以替换 Java 中的公共(public)静态方法?

css - 如何使用CSS更改组合框的外观

java - 如何将数据添加到 JavaFX 表行/单元格