2016-05-05 12 views
0

同様の問題を抱えている他のスレッドはほとんどありませんが、これらの回答でコードを実装しようとしましたが、これまでのところ成功していません。私は自分のコードの注目すべき部分を提供します。私は2つのFXMLファイルLoginFXMLDockFXMLと1つのTextField tfUsernameを持っています。私はtfUsernameに入力した入力をStringとしてLoginFXMLからDockFXMLに渡したいと思います。TextFieldから別のFXMLファイルへのユーザー入力を取得

以下の例で不要なコードを削除します。

LoginFXMLController

public class LoginFXMLController implements Initializable { 

    @FXML 
    private TextField tfUsername; 

    private void animateWhenLoginSuccess(){ 
      FXMLLoader fxmlLoader = new FXMLLoader(); 
      fxmlLoader.setLocation(getClass().getResource("DockFXML.fxml")); 
      Parent main = fxmlLoader.load(); 
      DockFXMLController c = (DockFXMLController) fxmlLoader.getController(); 
      c.loginUsername = tfUsername.getText(); 
//  Print below works which means that a String is okay 
      System.out.println(c.loginUsername); 
    } 

    @FXML 
    private boolean loginSuccessful() throws SQLException{ 

//  Login check in MySQL 
    } 
} 

DockFXMLController

public class DockFXMLController implements Initializable { 

    @FXML 
    private Label lblName; 

    public String loginUsername; 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     lblName.setText(loginUsername); 
    }  
} 

だから私は、この例で取得したいのですが、出力はLoginFXMLで入力したものを、ユーザー表示し、上でそれを示すことですLabel lblNameDockFXMLに設定します。

答えて

0

initialize()メソッドは、fxmlファイルをロードするプロセスの一部として呼び出されます。これはDockFXMLController

lblName.setText(loginUsername); 

ラインがLoginFXMLController

c.loginUsername = tfUsername.getText(); 

ラインの前に実行されることを意味します。

あなたは loginUserNameを設定するときにラベルを更新できるように、setメソッドを使用する必要が

public class DockFXMLController implements Initializable { 

    @FXML 
    private Label lblName; 

    private String loginUsername; 

    public String getLoginUserName() { 
     return loginUserName ; 
    } 

    public void setLoginUserName(String userName) { 
     loginUserName = userName ; 
     lblName.setText(loginUsername); 
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 

    }  
} 

、その後、あなたが実際の変数loginUsernameであることを

private void animateWhenLoginSuccess(){ 
     FXMLLoader fxmlLoader = new FXMLLoader(); 
     fxmlLoader.setLocation(getClass().getResource("DockFXML.fxml")); 
     Parent main = fxmlLoader.load(); 
     DockFXMLController c = (DockFXMLController) fxmlLoader.getController(); 
     c.setLoginUsername(tfUsername.getText()); 
} 

注を行います今はかなり冗長です。あなただけができます。

public class DockFXMLController implements Initializable { 

    @FXML 
    private Label lblName; 

    public String getLoginUserName() { 
     return lblName.getText() ; 
    } 

    public void setLoginUserName(String userName) { 
     lblName.setText(userName); 
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 

    }  
} 

あなたもこの方法

public StringProperty loginUserNameProperty() { 
     return lblName.textProperty(); 
    } 

を(これらのいずれも上記LoginControllerのコードを変更します)を追加することによって(必要な場合は、バインディングをリスナを登録して作成することが可能になる)、完全なプロパティを公開することができます。

+0

ありがとうございます。 'initialize()'メソッドが以前呼び出されているという事実を完全に見落としました。私は 'Properties'について読んでいたので、' loginUsername'にアクセスし、毎回 'animateWhenLoginSuccess()'を編集することなく複数回呼び出すほうがはるかに良い方法かもしれません。ここでそれを使うことは可能ですか? – brajevicm

+0

「編集する」animateWhenLoginSuccess()が毎回何を意味するのか分かりません。私はいくつかのより良いオプション(2つ目のコントローラからプロパティを公開することを含む)を更新しましたが、実際にあなたが何を求めているのかは分かりません。 –

+0

申し訳ありませんが私は明確でない場合。 「編集する」animateWhenLoginSuccess() '毎回「私は、データベースにあるイメージを表示してユーザー名で見つけなければならないときに、' c.setProfileImage(tfUsername.getText( ));例えば、。私のロジックが良いかどうかは分かりませんが、これまでのところ(あなたの助けを借りて)、ユーザー名を使ってデータベースから姓と名を表示できます。 – brajevicm

関連する問題