gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:26:37 24 4
gpt4 key购买 nike

我在一个 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/

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