2017-07-25 11 views
1

私はJavaプロジェクトでシーンがほとんどなく、解決方法がわからない問題が1つあります。 First scene called "Zadanie".この最初のシーンには「Zadanie」というテキストフィールドとコンボボックスがあります。だから、あなたがイメージで見ることができるように、私はTextFieldsにいくつかの数字を書いて、ComboBoxesのいくつかのオプションを選んだ。それから私は "Vypočítať"(ボタンアップ)をクリックして他のシーンをオンにしました。そして最初のシーン "Zadanie"に戻りましたが、TextFieldsとComboBoxesのすべてがなくなりました。 Back on first scene "Zadanie".コードの例や、最初のシーンでそれらを保持する方法を教えてください。ありがとうございました。Java - シーンビルダ - シーン切り替え後にTextFieldとComboBoxのユーザー入力が消える

+0

問題を再現いくつかのコードを投稿してくださいことはできますか? https://stackoverflow.com/help/how-to-ask –

答えて

0

問題は、画面を切り替えると、画面を表すオブジェクトが破棄されることです。したがって、ユーザー入力などの任意の変数も処分されます。あなたが画面に戻ったとき、それは異なるオブジェクトであるが、同じタイプのものである。これは、ユーザー入力などの変数の値が新しくインスタンス化/初期化されることを意味します。

解決方法: この情報を格納するいくつかのグローバル変数(たとえば、Mainの変数ですが、プログラミングの練習には異なるクラスを使用する必要があります)を作成します。ユーザーが画面を切り替えるためにクリックしたときに、画面が実際に切り替わる(アンロードされる)前に、ユーザー入力をグローバル変数に格納します。その後、画面を元の状態に戻したら、変数をグローバル変数のフィールドに再ロードします。

Global.java

class Global { 
    public static String nameFieldValue; 
    public static String ageFieldValue; 
} 

PersonForm.java

class PersonForm extends BorderPane { 
    Button closeButton; 
    TextField nameField; 
    TextField ageField; 

    public PersonForm() { 
     this.nameField = new TextField(...); 
     this.ageField = new TextField(...); 
     this.closeButton = new Button("Close Window"); 

     // set layouts of buttons here. 

     if (Global.nameFieldValue != null) { 
      this.nameField.setText(Global.nameFieldValue); 
     } 
     if (Global.passwordFieldValue != null) { 
      this.passwordField.setText(Global.passwordFieldValue); 
     } 

     PersonForm thisForm = this; // So that EventHandler cna use this. 
     this.closeButton.setOnAction(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       Global.nameFieldValue = thisForm.nameField.getText(); 
       Global.passwordFieldValue = thisForm.passwordField.getText(); 
       // switch screens. 
      } 
     }); 
    } 
} 
+0

ご協力ありがとうございますが、コードで書かれたいくつかの例を教えていただけますか?それは役に立つだろう。 –

+0

コードで私を助けてくれて本当に感謝しますが、私はそれを他の方法でやりました。私の2番目の画面から、私はポップアップ画面を作った。つまり、ボタンをクリックすると、2番目の画面が開きますが、最初の画面は閉じません。私は自分の教育のために次回はあなたのコードを確かに使用します。ありがとう、イアン・カークパトリック –

+0

問題ありません!助けてうれしい! –

関連する問題