私は2つのFXMLファイルがあると仮定します:mainとcustomコンポーネントを持つもの。私はこのように、カスタムコントローラからメインファイルコンポーネントにアクセスしたい:別のファイルコントローラからコンポーネントにアクセスするには?
Main.fxml:
<FlowPane>
<children>
<TextField fx:id="source" />
<CustomBox fx:id="cbox" />
</children>
</FlowPane>
Custom.fxml:
は<fx:root type="HBox">
<children>
<Button fx:id="showButton" onAction="#show" text="Show" />
</children>
</fx:root>
CustomBox.java:
public class CustomBox extends HBox {
@FXML
private TextField source;
public CustomBox() {
FXMLLoader loader = new FXMLLoader(getClass().getResource("Custom.fxml"));
loader.setRoot(this);
loader.setController(this);
try {
loader.load();
} catch (IOException e) {
e.printStackTrace();
}
}
@FXML
protected void show() {
System.out.println(source.getText());
}
}
しかしshow()メソッドは私にNPEを与えます。どのようにコンポーネントとコントローラを別のファイルからバインドできますか?
あなたはで定義されたコントロールを注入することはできません1つのFXMLファイルを別のFXMLファイル用のコントローラに追加することです。一般的に、定義されているFXML用のコントローラの外にコントロールを公開するのは悪い習慣です。代わりに、メインコントローラへの参照をカスタムコンポーネントに渡し、メインコントローラ上のメソッドを呼び出してテキストを取得します(またはMVCアプローチを使用してモデルクラスを定義し、両方のコントローラでモデルのインスタンスを共有します)。 –