gpt4 book ai didi

javafx-2 - 在 Java FX 中扩展类?

转载 作者:行者123 更新时间:2023-12-04 00:41:47 25 4
gpt4 key购买 nike

在许多情况下,JavaFX 需要使用扩展现有类的类进行自定义。我尝试了这种方法,例如向 NumberAxis 类添加一个方法,使轴的标签能够旋转。但是我得到了一个“NumberAxis is declared final, can't be extended”编译器错误。我想知道延长类(class)的人如何做?他们是否有权访问 javafx 的源代码,修改它以使某些类不是最终类,然后重新编译它? (听起来很棘手!)

最佳答案

在 JavaFX 框架中使大量类最终化是框架开发人员有意做出的决定。要了解其完成原因,请参阅 Making Color Final proposal .这只是一个例子,还有其他原因。我认为在 Swing 框架中进行子类化的经验是,它会导致 JavaFX 设计人员希望避免的错误和维护问题,因此很多事情都是最终的。

除了直接子类化之外,还有其他方法可以扩展功能。轮换示例的一些替代方案:

  1. 聚合:将 NumberAxis 作为新类(例如 NumberAxisWithRotatableText)的成员包括在内,它添加了一个访问器以获取底层 NumberAxis 节点和一个执行旋转的方法(例如通过如下所述的查找).
  2. 组合:例如扩展 Pane、添加 NumberAxis、禁用轴上的标准文本绘制并根据需要自行添加旋转标签。
  3. css 样式表:例如,使用选择器查找 NumberAxis 中的文本,并使用 -fx-rotate 属性旋转它。
  4. 节点查找:使用 node.lookup获取底层文本节点,并通过 API 应用旋转。
  5. skin:所有控件都有一个 skin类附加它们,用自定义皮肤类替换默认皮肤类。
  6. 子类替代类:子类抽象 ValueAxis类而不是最终的 NumberAxis 类。

JavaFX 的源代码是 availablebuild instructions .但是,我不建议破解源代码的个人副本以删除最终结构,除非您还将其作为已接受的补丁提交给 JavaFX 系统,这样您就可以确保您的应用程序不会在标准 JavaFX 安装时中断.

如果您真的认为给定类的子类化是个好主意,那么 log a change request .有时 JavaFX 开发人员过分热心,将一些东西定为 final 而不是 final 会更好。 NumberAxis 可能属于该类别。

关于javafx-2 - 在 Java FX 中扩展类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17867861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com