Java重用通用FXML

时间:2017-02-17 18:32:27

标签: java javafx javafx-2 fxml

我有一些带有许多组件的通用FXML,但为了简单起见,我们说它是一个textArea。

<?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为“test”。

所以我的问题是你可以在一个控制器中重复使用这个FXML吗?

我最初的想法是通过一个通用控制器,如下所示:

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


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




}

并将FXML指向 GenericController 。 然后在一个更具体的控制器中扩展它。但我只是在 fx:controller =“sample.Controllers.GenericController”中得到一个错误的LoadException错误。

1 个答案:

答案 0 :(得分:3)

只是不要在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();