2014-02-15 55 views
1

我已經通過這個類似的question,但它使用Singleton類。另外我發現的其他類似問題主要是嵌套控制器。所以我提出了這個簡單的問題,希望得到兩個不同FXML中TextField綁定文本屬性的答案。如何綁定不同FXML中的兩個TextField的文本屬性

我有兩個不同的fxmls 2個文本框,這些都是他們的控制器類:

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

} 

} 

如何在我的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(); 

} 
相關問題