Java 重用通用 FXML

Java reuse generic FXML

我有一些包含很多组件的通用 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 为 "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" 处出错。

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