4

fx:controller=""1つのFXMLファイルに2つのコントローラー()を追加することは可能ですか?

私はなんとか1つだけ追加することができましたfx:controller=""

コードを見る

<BorderPane id="BorderPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="596.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="demoapp.ClientArea">
4

2 に答える 2

2

を使用して FXML ファイル内に複数のコントローラーを設定することはできません (fx:controller="")。代わりに、コントローラーを手動で挿入することを検討してください。基本的に 2 つの方法があります。

FXMLファイル内のコントローラーに言及せずにsetControllerメソッドを使用する:

FXMLLoader loader = new FXMLLoader();
URL location = getClass().getClassLoader().getResource("fxml/ClientArea.fxml");
loader.setLocation(location);   
loader.setController(new ClientArea());
// loader.setController(new Undecorator());
loader.load();

より適切には、setControllerFactoryメソッドを使用します。

最初に、両方のコントローラがファイルに記載されているインターフェイス (イベント ハンドラ メソッドを含む) を実装していることを確認してから、ファイルClientArea からビューをロードするときにコントローラを選択します。UndecoratorIcontrollerFXML(fx:controller="IController")FXML

FXMLLoader loader= new FXMLLoader();
URL location = getClass().getClassLoader().getResource("fxml/ClientArea.fxml");
loader.setLocation(location);
loader.setControllerFactory(new Callback<Class<?>, Object>() {   
    public Object call(Class<?> p) {
        return new ClientArea(); 
           // return new Undecorator();
    }
});
loader.load();
于 2013-04-01T13:05:35.893 に答える
0

コードに収まる場合は、Undecorator.javaから拡張できますClientArea.java。したがって、任意のメソッド (または FXML メソッド/コントロール) をその親から使用できます: ClientArea.java. JavaFX SceneBuilder を使用すると、コントローラーの選択で package.ClientArea が表示されませんが、実行時には機能します。

于 2013-03-22T17:56:07.797 に答える