Javafx 如何绑定位于不同FXML中的两个文本字段的文本属性
我也经历过类似的过程,但它使用单例类。我发现的其他类似问题主要是嵌套控制器。所以我提出了这个简单的问题,希望得到一个关于绑定不同FXML中两个文本字段的文本属性的答案 我在两个不同的FXML中有两个文本字段,它们是它们的控制器类: TextField1Controller.javaJavafx 如何绑定位于不同FXML中的两个文本字段的文本属性,javafx,javafx-2,javafx-8,Javafx,Javafx 2,Javafx 8,我也经历过类似的过程,但它使用单例类。我发现的其他类似问题主要是嵌套控制器。所以我提出了这个简单的问题,希望得到一个关于绑定不同FXML中两个文本字段的文本属性的答案 我在两个不同的FXML中有两个文本字段,它们是它们的控制器类: TextField1Controller.java public class TextField1Controller implements Initializable{ @FXML TextField txt1FxId; @Override public voi
public class TextField1Controller implements Initializable{
@FXML
TextField txt1FxId;
@Override
public void initialize(URL location, ResourceBundle resources) {
}
}
public class TextField2Controller implements Initializable{
@FXML
TextField txt2FxId;
@Override
public void initialize(URL location, ResourceBundle resources) {
}
}
TextField2Controller.java
public class TextField1Controller implements Initializable{
@FXML
TextField txt1FxId;
@Override
public void initialize(URL location, ResourceBundle resources) {
}
}
public class TextField2Controller implements Initializable{
@FXML
TextField txt2FxId;
@Override
public void initialize(URL location, ResourceBundle resources) {
}
}
MainApp.java
public class MainApp extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage1) throws Exception {
AnchorPane pane1 = FXMLLoader.load(this.getClass().getResource("TextField1.fxml"));
AnchorPane pane2 = FXMLLoader.load(this.getClass().getResource("TextField2.fxml"));
Stage stage2 = new Stage();
stage1.setScene(new Scene(pane1));
stage2.setScene(new Scene(pane2));
stage1.show();
stage2.show();
}
}
如何在MainApp.java中绑定这些文本字段的文本属性,以便在一个文本字段上键入内容会打印在另一个文本字段上,反之亦然?方法是:
- 使用实例化的FXML加载程序并调用其非静态方法
- 在相关控制器中放置文本字段的访问器并获取它们
- 双向绑定文本字段
public TextField getTxt1FxId() {
return txt1FxId;
}
进入TextField1Controller
类,然后getTxt2FxId()
进入第二个类。主应用程序
@Override
public void start(Stage stage1) throws Exception {
FXMLLoader loader = new FXMLLoader();
Parent pane1 = (Parent) loader.load(getClass().getResource("TextField1.fxml").openStream());
TextField1Controller controller1 = loader.getController();
loader = new FXMLLoader();
Parent pane2 = (Parent) loader.load(getClass().getResource("TextField2.fxml").openStream());
TextField2Controller controller2 = loader.getController();
controller1.getTxt1FxId().textProperty().bindBidirectional(
controller2.getTxt2FxId().textProperty());
Stage stage2 = new Stage();
stage1.setScene(new Scene(pane1));
stage2.setScene(new Scene(pane2));
stage1.show();
stage2.show();
}
方法是:
- 使用实例化的FXML加载程序并调用其非静态方法
- 在相关控制器中放置文本字段的访问器并获取它们
- 双向绑定文本字段
public TextField getTxt1FxId() {
return txt1FxId;
}
进入TextField1Controller
类,然后getTxt2FxId()
进入第二个类。主应用程序
@Override
public void start(Stage stage1) throws Exception {
FXMLLoader loader = new FXMLLoader();
Parent pane1 = (Parent) loader.load(getClass().getResource("TextField1.fxml").openStream());
TextField1Controller controller1 = loader.getController();
loader = new FXMLLoader();
Parent pane2 = (Parent) loader.load(getClass().getResource("TextField2.fxml").openStream());
TextField2Controller controller2 = loader.getController();
controller1.getTxt1FxId().textProperty().bindBidirectional(
controller2.getTxt2FxId().textProperty());
Stage stage2 = new Stage();
stage1.setScene(new Scene(pane1));
stage2.setScene(new Scene(pane2));
stage1.show();
stage2.show();
}