2016-04-19 3 views
2

私はJavaFXの8アプリケーションを持っている...使用コントロール

MainApp.java

Parent root; 
    root = FXMLLoader.load(getClass().getResource("/fxml/MainForm.fxml")); 
    Scene scene = new Scene(root);   
    stage.setScene(scene); 
    stage.show(); 

MainForm.fxmlfx:controller="MainController"とそのコントローラを定義し、コントローラ自体は含まれていテキストフィールドtextFieldUsername

@FXML 
protected TextField textFieldUsername; 

そして、別のコントローラfx:controller="AuxController"と第二の形態AuxForm.fxmlがあります。この第二の形式は、このようなMainForm.fxmlに含まれている:

<content> 
    <fx:include source="AuxForm.fxml" /> 
</content> 

は、今私はtextFieldUsernameの値を取得する必要があります。この値は2番目のコントローラで必要ですが、これを行う方法はわかりません。私の最初のアイデアはpublic class AuxController extends MainControllerでしたが、すべてのコントロールが利用可能ですが、これは機能しません。

答えて

2

fx:includefx:idを追加します。

<content> 
    <fx:include fx:id="auxForm" source="AuxForm.fxml" /> 
</content> 

今、あなたは、「メインコントローラ」の中に含まFXML(「ネストされたコントローラ」)用のコントローラを注入することができます。 AuxForm.fxmlと仮定すると、あなたが行うことができますfx:controller="AuxController"があります。ここ

public class MainController { 

    @FXML 
    private AuxController auxFormController ; 


    public void initialize() { 
     // call any methods you need on auxFormController ... 

     // ... 
    } 

    // ... 
} 

ルールは、「ネストされたコントローラ」のフィールド名を形成するためにfx:idの値に単語Controllerを追加していることです。

AuxController(たとえばpublic String getUsername() {...})に必要なメソッドを定義し、必要に応じてメインコントローラから呼び出すことができます。

あなたはAuxControllerにデータを提供するために必要な場合たとえば、あなたがMainControllerそこから設定するか、または結合することができるプロパティを提供します:

public class AuxController { 

    private final StringProperty username ; 

    public StringProperty usernameProperty() { 
     return username ; 
    } 

    //... 
} 

次に、あなたが行うことができ、メインコントローラのinitialize()方法では、今

auxFormController.usernameProperty().bind(
    textFieldUsername.textProperty()); 

username.get()はあなたのテキストフィールドのテキストを提供します。

詳細はFXML documentationを参照してください。

+0

投稿していただきありがとうございます。しかし、私は実際にそれを取得しないと思う。私の例では、 'AuxController'で定義されたメソッドで' textFieldUsername'( 'MainController'で定義されています)を使いたいと思います。私があなたの答えを得る限り、それは他の方法ラウンドですか? –

+0

あなたのコントローラの外にUI要素を公開するべきではありません。他のコントローラーのテキストフィールドは何が必要ですか?あなたが何をしようとしているのかを精緻化し、私がコンピュータに戻ったときに明日の答えを更新します。 –

+0

私の質問の一部(最後の段落)を編集しました: "今はtextFieldUsernameの値を取得する必要があります。この値は2番目のコントローラで必要です..." –

関連する問題