如何从另一个FXML控制器获取一个Java FXML控制器中的数据(这些控制器不是嵌套控制器)? [英] How to get data in one Java FXML Controller from another FXML Controller (these controllers are not nested controllers)?
问题描述
我在一个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屋!