2012-09-22 35 views
21

this tutotialは、カスタムコンポーネントを組み込み、コンテナのコントローラからコントローラを使用する方法の例です。JavaFXネストされたコントローラ(FXML <include>)

main_window_content.fxml

<VBox fx:controller="com.foo.MainController"> 
    <fx:include fx:id="dialog" source="dialog.fxml"/> 
    ... 
</VBox> 

MainController.java

public class MainController extends Controller { 
    @FXML private Window dialog; 
    @FXML private DialogController dialogController; 

    .. 

コンポーネントは一度だけ含まれている場合は、それが正常に動作します。 同じコンポーネントが2回含まれている場合、コントローラは初期化されません。 両方のコントローラがnullです。

main_window_content.fxml

<VBox fx:controller="com.foo.MainController"> 
     <fx:include fx:id="dialog1" source="dialog.fxml"/> 
     <fx:include fx:id="dialog2" source="dialog.fxml"/> 
     ... 
    </VBox> 

MainController.java

public class MainController extends Controller { 
     @FXML private Window dialog1; 
     @FXML private DialogController dialogController1; 
     @FXML private Window dialog2; 
     @FXML private DialogController dialogController2; 

は、誰かが問題を解決するために私を助けてもらえますか? ありがとう

これは私のFXMLローディングコードです。これは、メインアプリケーションの方法で実行されています(OTN)からダニエルへ

public void start(Stage stage) throws Exception { 
    Parent root = FXMLLoader.load(getClass().getResource("main_window_content.fxml")); 
    stage.setTitle("FXML Welcome"); 
    stage.setScene(new Scene(root, 300, 275)); 
    stage.show(); 
} 
+0

2番目の答えはこの質問の正しい解決策です。 "Accepted"とマークする必要があります –

+0

@AmirAradどちらが「2番目」ですか? – glglgl

答えて

29

おかげで、私は私のコントローラ変数の名前が間違っていた、私のコードでエラーを検出しました。それらは<fx:id>Controllerである必要があります。 は、それがあるべき言い換える:

MainController.java

public class MainController extends Controller { 
@FXML private Window dialog1; 
@FXML private DialogController dialog1Controller; 
@FXML private Window dialog2; 
@FXML private DialogController dialog2Controller; 

しかし、バージョン2.2で導入されたchangesを勉強し、私はすべてが簡単に<fx:root>タグ (like this tutorial)を使用することによって解決することができることを見出しました。 私はFXMLで私のコンポーネントを入力するだけで、このようにそれを宣言する:

<HBox> 
    <Dialog id="dialog1" text="Hello World!"/> 
    <Dialog id="dialog2" text="Hello World!"/> 
</HBox> 

は私が

+16

また、あなた自身の答えを受け入れたものとしてマークして、問題の解決策としてより見えるようにしてください。この回答の隣のチェックマークをクリックするだけです。 –

1

ネストされたfxmlsと8.0のほかのNetBeansのバグがあるように思わ役に立つことを願っています。ネストされたfxmlのコントローラオブジェクトを作成するためにnetbeansをカウントすることはできません。手動でMainControllerに挿入する必要があります。コントローラがネットビーンで更新されるたびに、それは一掃され、退屈なものになることがあります。この場合、メインコントローラに手動

@FXML private DialogController dialog1Controller; 

行を挿入することになる、それが正常に動作するこの例で 。大きなfxmls /コントローラの編成に非常に便利です。

関連する問題