2017-02-17 14 views
1

私はいくつかのコンポーネントを持つ汎用FXMLを持っていますが、簡単にするためにtextAreaと言うことができます。Java再利用generic FXML

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.control.TextArea?> 


<TextArea fx:id="test" prefHeight="200.0" prefWidth="200.0" promptText="test data" xmlns="http://javafx.com/javafx/8.0.101" xmlns:fx="http://javafx.com/fxml/1" /> 

そして、これにtextAreaにあなたはそれが「テスト」のIDを持っていることがわかります。

私の質問はコントローラでこのFXMLを再利用できますか?

私の最初に考えたのは下図のように汎用コントローラーを介していた:

public abstract class GenericController { 
    Program program = Program.getInstance(); 
    @FXML TextArea test; 


    @FXML 
    abstract void initialize(); 
    abstract void setData(); 




} 

そしてGenericControllerにFXMLを指します。 そしてをより特定のコントローラーに拡張します。しかし、私はちょうどfx:controller = "sample.Controllers.GenericController"にあるLoadExceptionErrorを取得します。

答えて

2

コントローラをFXMLファイルに指定しないでください。つまり、fx:controller属性を完全に削除してください。そして、あなたはFXMLをロードする際にコントローラを設定します。

FXMLLoader loader = new FXMLLoader(getClass().getResource("path/to/generic.fxml")); 
GenericController controller = new SpecificControllerImplementation(); 
loader.setController(controller); 
Parent root = loader.load(); 
+0

あり、あなたが必要な場合(たとえば、あなたが依存性注入フレームワークと組み合わせることができ、)あなたは、コントローラの工場を使用して行うことができ、より高度なものは、ありますが、それこのような音はあなたが必要とするもののために十分でしょう。 –

+0

ちょうどこれを試して、私はまだ 'javafx.fxml.LoadException:コントローラが指定されていません。 ' – audittxl

+0

@audittxlそれからあなたは何か間違っています。静的な 'load(URL)'メソッドではなく、引数のない 'load()'メソッドを呼び出していますか? –