2017-11-07 14 views
0

私の行動のテキストを私の2番目のPaneで変更する必要があります。そのために私は使用しようとしました:JavaFXの既存のペインからコントローラにアクセスする方法は?

try{ 
    HouseDA.setDefault(house); 

    FXMLLoader loader = new FXMLLoader(); //Loads an object hierarchy from an XML document. 
    loader.setLocation(MainApp.class.getResource("view/MainSideMenu.fxml")); // which document 
    loader.load(); 

    MainSideMenuController controller = loader.<MainSideMenuController>getController(); 
    controller.refreshHouseInfo(); 

    }catch(Exception e){} 

コードは正常に動作しますが、テキストは変更されません。デバッグ後、Paneの別のインスタンスが作成され、そこでテキストが変更されたようです。 のコントローラのペインにアクセスしてテキストを変更するにはどうしたらいいですか?

+0

[この質問](https://stackoverflow.com/questions/47156903/accessing-fx -control-then-call-method-updates-the-label-text-issue)、(loader.load()を介して)いくつかのUI要素を作成するFXMLを読み込みます。そうすることは決してどこにも表示されません。その結果、UIを変更するコントローラ上のメソッドを呼び出すと、何も表示されません(表示されないもののテキストを変更しています)。 –

+0

* "既存のペインのコントローラーにはどのようにアクセスできますか?" * FXMLファイルからペインをロード(および表示)すると、コントローラーを取得します。次に、コントローラにアクセスする必要がある人にコントローラを渡します。おそらくhttps://stackoverflow.com/questions/29639881/javafx-how-to-use-a-method-in-a-controller-from-another-controllerが役立ちます。 –

答えて

0

私はあなたの質問をundestroodすればいいのか分かりませんが、これを試すことができます。

  1. 2つの枠で1つのFXMLファイルを作成します。
  2. 最初のペインでいくつかの要素を作成します。 (たとえばTextArea)
  3. 2番目のペインで、たとえば、いくつかのボタンを作成します。
  4. これをTextAreaに、ButtonにIDを付けます。 (fx:id = "yourID")をFXMLファイルに保存します。
  5. メインコントローラクラスにインスタンスを作成します。 (TextArea yourTextAreaID; Button yourButtonID)

次に、myTextAreaのすべてを他のペインから変更できます。

yourButtonID.setOnAction(event -> { 
    yourTextAreaID.setText("something"); 
}); 

ユーザーがボタンをクリックすると、textAreaの2番目のペインでテキストが「何か」に設定されます。 (一つだけのウィンドウを表示したい場合は、あなたがのsetVisibleとそれを管理することができます(BOOLVALUE)メソッド)と同一に

mySecondPane.setVisible(false); 
関連する問題