我有一些包含很多组件的通用 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”。
所以我的问题是您可以在多个一个 Controller 中重用此 FXML 吗?
我最初的想法是通过通用 Controller ,如下所示:
public abstract class GenericController {
Program program = Program.getInstance();
@FXML TextArea test;
@FXML
abstract void initialize();
abstract void setData();
}
并将 FXML 指向 GenericController。 然后在更具体的 Controller 中扩展它。但我只是得到一个 LoadExceptionError,它在 fx:controller="sample.Controllers.GenericController" 处出错。
最佳答案
只是不要在 FXML 文件中指定 Controller ,即完全删除 fx:controller
属性。然后在加载 FXML 时设置 Controller :
FXMLLoader loader = new FXMLLoader(getClass().getResource("path/to/generic.fxml"));
GenericController controller = new SpecificControllerImplementation();
loader.setController(controller);
Parent root = loader.load();
关于Java 重用通用 FXML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42305101/