2017-02-17 185 views
1

我有一些通用FXML與許多組件,但讓我們說它是一個textArea爲簡單起見。Java重用通用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上,您可以看到它有一個「test」標識。

所以我的問題是你可以重複使用這個FXML在多於一個控制器?

我最初的想法是通過一個通用控制器,如下圖所示:

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


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




} 

,並指出了FXML到GenericController。 然後延伸它在一個更具體的控制器。但我只是得到一個LoadExceptionError錯誤在fx:controller =「sample.Controllers.GenericController」

回答

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()方法,不是靜態的'load(URL)'方法嗎? –