JavaFX - 绑定stage.getUserData

时间:2016-02-23 18:02:59

标签: javafx javafx-2

我可以将stage.getUserData与TextBox绑定吗?

我的目标是。

如果用户选择我的应用程序,我会在事件focusProperty中的方法start stage.setUserData中保存信息。

public void start(Stage stage) throws Exception {       

    try{

        Parent root = FXMLLoader.load(getClass().getResource("Hlavni.fxml"));                                
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.getIcons().add(new Image("file:kcl.gif"));
        stage.setTitle("KCL - Evidence hovorů - v1.0");                                                                          
        stage.show();


        /*
            Implementujeme událost - stav kdy uživatel vybere okno aplikace.
        */
            stage.focusedProperty().addListener((ObservableValue<? extends Boolean> ov, Boolean lostFocus, Boolean gainFocus) -> {
                if (gainFocus==true) {
                    try {

                        /*
                            Po výběru gainFocus naplníme systémovou metodu stage.setUserData
                            V kontroleru dané vyzvědneme přes zjištěnou stage.getUserData
                            Do metody ukládáme, pouze pokud je null
                        */
                        // Pokud je stage.getUserData == null, uložíme tam číslo, jinak nic.
                        if(stage.getUserData() == null){
                            // Připojíme se do MSSQL a zjistíme telefonní číslo
                            stage.setUserData("607700962");
                        }
                    }catch(Exception e){
                        e.printStackTrace();
                    }
                }
        });                

在控制器中我需要自动填充TextBox。

因为我有想法使用TextBox绑定stage.getUserData。

1 个答案:

答案 0 :(得分:0)

我只是在控制器类中放入一个方法并调用它:

e.g。

public class MyController {

    // @FXML-annotated nodes from fxml file, e.g.
    @FXML
    private TextField textField ;

    public void initialize() {
        // ...
    }

    // handlers etc...

    public void setInformation(String data) {
        // update text box:
        textField.setText(data);
    }
}

然后你就可以了

public void start(Stage stage) throws Exception {       

    try{

        FXMLLoader loader = new FXMLLoader(getClass().getResource("Hlavni.fxml"));
        Parent root = loader.load(); 
        MyController controller = loader.getController();                               
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.getIcons().add(new Image("file:kcl.gif"));
        stage.setTitle("KCL - Evidence hovorů - v1.0");                                                                          
        stage.show();



        stage.focusedProperty().addListener((ObservableValue<? extends Boolean> ov, Boolean lostFocus, Boolean gainFocus) -> {
            if (gainFocus) {
                controller.setInformation("607700962");
            }
        });   

    } catch (Exception exc) {
        exc.printStackTrace();
    }
    // ...
}