Javafx 如何绑定位于不同FXML中的两个文本字段的文本属性

Javafx 如何绑定位于不同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

我也经历过类似的过程,但它使用单例类。我发现的其他类似问题主要是嵌套控制器。所以我提出了这个简单的问题,希望得到一个关于绑定不同FXML中两个文本字段的文本属性的答案

我在两个不同的FXML中有两个文本字段,它们是它们的控制器类:

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

}
}
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();  

}