【问题标题】:Java reuse generic FXMLJava 重用通用 FXML
【发布时间】:2017-02-17 18:32:26
【问题描述】:

我有一些包含很多组件的通用 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。 然后在更具体的控制器中扩展它。但我只是得到一个 LoadExceptionError,它在 fx:controller="sample.Controllers.GenericController" 处出错。

【问题讨论】:

    标签: java javafx javafx-2 fxml


    【解决方案1】:

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

    【讨论】:

    • 如果需要,您可以使用控制器工厂(例如,您可以与依赖注入框架结合使用)执行更高级的操作,但听起来这已经足够了你需要。
    • 刚刚试过这个,我仍然收到javafx.fxml.LoadException: No controller specified.
    • @audittxl 那么你做错了什么。你调用的是无参数的load() 方法,对吧,不是静态的load(URL) 方法?
    • 我的错误我没有编译代码doh!并运行旧代码!
    • 我现在收到 javafx.scene.layout.BorderPane 无法转换为 javafx.fxml.FXMLLoader 错误?!
    猜你喜欢
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 2020-07-11
    相关资源
    最近更新 更多