2014-02-15 2 views
1

Я прошел через этот аналогичный question, но он использует Singleton Class. Кроме того, другой подобный вопрос, который я нашел, в основном вложенные контроллеры. Поэтому я поднимаю этот простой вопрос, надеясь получить ответ на обязательное текстовое свойство двух текстовых полей, которые находятся в разных FXML.Как связать свойство текста двух текстовых полей, которые находятся в разных FXMLs

У меня есть два текстовых поля в двух разных fxmls и это их классы контроллеров:

TextField1Controller.java

public class TextField1Controller implements Initializable{ 

@FXML 
TextField txt1FxId; 

@Override 
public void initialize(URL location, ResourceBundle resources) { 


} 
} 

TextField2Controller.java

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

} 

} 

Как связать свойство text этих текстовых полей в моей MainApp.java, чтобы печатать на одном текстовом поле в другом текстовом поле и наоборот?

ответ

4

подход будет:

  • использовать конкретизированный 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(); 

} 
Смежные вопросы