28

このチュートリアルでは、カスタム コンポーネントを組み込みコンテナーのコントローラーからそれらのコントローラーを使用する方法の例を示します。

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;

    ..

コンポーネントが 1 回だけ含まれている場合は、正常に機能します。同じコンポーネントが 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 読み込みコードです。メインアプリケーションメソッドで実行されます:

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(); 
}
4

2 に答える 2

40

Daniel (OTN から) のおかげで、コードにエラーが見つかりました。コントローラー変数の名前が間違っていました。彼らはする必要があります<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 で導入された変更<fx:root>を調べたところ、タグを使用することですべてが簡単に解決できることがわかりました(このチュートリアルのように)。次のように宣言するだけで、コンポーネントを FXML に入力しました。

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

お役に立てれば幸いです

于 2012-09-24T20:31:21.007 に答える
2

ネストされた fxml を使用する netbeans 8.0 にもバグがあるようです。ネストされた fxml のコントローラー オブジェクトを作成するために netbeans を当てにすることはできません。手動で MainController に挿入する必要があります。コントローラーが netbeans で更新されるたびに消去されるため、面倒な作業になる可能性があります。この例では、

@FXML private DialogController dialog1Controller;

この場合、手動でメイン コントローラに接続すると、正常に動作します。大きな fxmls/コントローラーを整理するのに非常に便利です。

于 2014-06-24T13:22:19.147 に答える