2017-01-26 7 views
0

私のアプリケーションには、その内部に追加された他のすべてのパネル(setVisible())を管理するメインパネルがあり、他のパネルにはコンポーネントがあります。問題はコントローラーを追加するときです。私は各パネルに別のコントローラーを追加したいと思いますが、従来の方法では表示されません。これを解決する方法はありますか?単一のfxmlファイルに2つのコントローラを追加する方法はありますか?

printscreen

+0

ありがとうございます。メインパネル内のペインを別のファイルに分割すると、どのようにペインを追加できますか? –

答えて

1

をあなたの子供のセクションを読み込むことができ、あなたが(とFXMLで定義されたUI階層のインスタンス間FXMLファイルとコントローラクラス間の1対1で対応していなければなりませんファイルインスタンス、コントローラインスタンス)。

コントローラをモジュール化する場合は、FXMLファイルもモジュール化する必要があります。これを行うには

一つの方法は、<fx:include>を使用することです:

<!-- xml headers, imports, etc --> 

<BorderPane fx:controller="com.example.MainController"> 
    <top> 
     <fx:include source="header.fxml" fx:id="header" /> 
    </top> 

    <center> 
     <!-- ... --> 
    </center> 

    <bottom> 
     <fx:include source="footer.fxml" fx:id="footer" /> 
    </bottom> 

</BorderPane> 

次にheader.fxmlに:

public class MainController { 

    @FXML 
    // field name is fx:id+"Controller": 
    private HeaderController headerController ; 

    // etc 
} 

<HBox fx:controller="com.example.HeaderController"/> 
    <!-- ... --> 
</HBox> 

メインコントローラは、 "付属のコントローラ" を参照することができます

+0

ありがとう、本当に助けてくれました。 –

0

あなたは、親コントローラとFXMLを定義することができます。そして、その中にあなたが...このように一般的に

@FXML 
private Pane childPane; 

@FXML 
public void initialize() { 
    try { 
     FXMLLoader loader = new FXMLLoader(); 
     Parent node = loader.load(getClass().getClassLoader().getResource("some.fxml").openStream()); 
     My Controller childController = loader.getController(); 
     childPane.getChildren().setAll(node); 

    ...... 
    }catch (Exception e) { 
    } 
} 
関連する問題