2017-09-07 9 views
0

私のJavaFXプロジェクトは、次の手順を実行します。Modelクラス で 計算最適値がController を初期化FXMLLoader の新しいインスタンスを作成して表示IntelliJにFXMLLoaderからFXMLコントローラを取得してシンタックスhilightingを伝えるには?

マイFXMLファイルがfx:controller="com.example.Controller"のような行を持っていないのレンダリングControllerview.fxml を設定します。 IntelliJは、使用するコントローラーがわからないため、onMouseClicked="#processMyButtonClick"のようなメソッドを解決できません。 No Controller specified for top level element。 IntelliJに伝える方法はありますか?コントローラがFXMLで指定されている場合、JavaはController value already specified例外をスローします。

この結果、ソース管理ログは誤検出で汚染され、「100エラーが見つかりました」と#methodNamefxmlpublic void methodName(){/*..*/}の間のリンクが機能しなくなります。

IntelliJにPOJOクラスからfxmlコントローラを派生させる方法はありますか?


"No Controller specified for top level element" when programatically setting a Controller 1は、FXMLファイルでコントローラを指定することができますに基づいて、私はFXMLがロードされる前に、コントローラを初期化したいと思いますので、これは望ましくありません。

+1

おそらくない何をしたいが、それは 'FXを指定するには、両方のことが可能です'controllerFactory'を使ってそれに接続します。 – fabian

+0

FXMLファイルの内部にコントローラを含めるのはなぜですか? – notmyf4ulty

答えて

1

私もこれを長い間嫌っていましたが、私は回避策を見つけました。何が注入される前に、コントローラを初期化しcontroller`と前にコントローラを初期化する:あなたはFXMLファイルでコントローラを指定し、このようにそれをロードします。

public static Node loadScene(Controller c) { 
    URL resource = Controller.class.getResource("/scene.fxml"); 
    FXMLLoader loader = new FXMLLoader(resource); 
    loader.setControllerFactory(param -> c); 
    loader.load(); 
    return loader.getRoot(); 
} 
+0

最小侵襲的処置。ありがとう。 – Stepan

関連する問題