gpt4 book ai didi

JavaFX 2.2 从头开始​​控制

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:38 25 4
gpt4 key购买 nike

有谁知道为什么 Internet 上有这么多关于使用 com.sun 的 SkinBase 和 BehaviorBase 类在 JavaFX 中创建自己的自定义控件的示例?他们为什么使用?为什么在 FXEnsemble 中没有这样的实现?是否有任何最佳实践?请您解释一下为什么我应该使用 BehaviorBase 和 SkinBase 进行自定义控件?提前致谢。

更新:

我看到了这个视频 - http://www.parleys.com/#st=5&id=2789&sl=1 ,指的是创建自定义控件。作者说的是Public(Control & Skin)和Private API,实际上Behavior是一个Private API。使用com.sun的BehaviorBase和SkinBase是否合适,官方文档中没有描述?

更新 2:

SkinBehaviour 和 JavaFX 8:http://mail.openjdk.java.net/pipermail/openjfx-dev/2013-February/005874.html

最佳答案

原答案

有一个对 improve support for building custom controls 的关键功能请求目标是为下一个主要的 JavaFX 版本(JavaFX 8.0/JDK 8.0)交付。

在 BehaviourBase 和 SkinBase API 公开并且构建您自己的自定义控件所需的其他工作(例如自定义 css 属性和伪类的定义)公开为公共(public) API 之前,关于使用这些类的最佳建议是 Richard Bair, JavaFX platform带领:

If your intent is to write a new control for submission to openjfx . . . then definitely use these classes. If you are writing an application that is meant to work with future versions of the platform and you don't want to break, then don't use these classes.



在任何情况下,BehaviourBase 和 SkinBase API 的使用可能最适合由控件库创建者构建的控件(例如为 open-jfx 项目构建以包含在核心 JavaFX api 中,或 jfxtras 项目链接在以前的答案)。许多可重用的自定义应用程序组件不需要使用这些类引入的复杂性。

除非您正在为库创建通用平台控件,否则您不需要子类化 Control采取以下路线之一可能会更好:
  • 使用现有控件并通过 CSS 事件及其公共(public) API 对其进行自定义。
  • 子类化现有控件以执行更彻底的更改。
  • 创建您自己的类,该类将容器子类化,例如 Group或布局 Pane子类。在您的子类中处理布局并封装多个 JavaFX 节点和控件的行为。

  • 有关从 Container 创建自定义、可重用组件的示例,请参阅 custom component section FXML 文档简介。有关对现有控件进行子类化的示例,请参阅此 JavaFX clock 示例中的 DigitalClock 类。 .

    更新

    写完这个答案后,我查看了 control creation presentation从更新后的答案链接,并提出与此答案相同的建议。我会向对 JavaFX 控件创建主题感兴趣的任何人推荐该演示文稿。

    2014 年 12 月更新

    在 Java 8 中已经完成了许多工作来创建公共(public) API,以使用 JavaFX 框架类创建控件。因此可以构建您自己的自定义控件来扩展 Control或 Control 子类并使用 SkinBase .这样的控件在结构和 API 上类似于内置的 JavaFX 控件,例如标签、按钮等。有关如何执行此操作的一些信息是 documented in an informal way on the open-jfx wiki ,尽管 Oracle 尚未提供关于在 main JavaFX documentation page 上创建此类控件的完整官方文档。 .

    API 的一部分未最终确定为公共(public) API 是 BehaviourBase 类,通常用于处理一些跨平台特定的任务实现,例如控件的加速键命令,但是您仍然可以使用基本的 JavaFX 键处理事件或第三方ControlsFX 等库 Action实现此类行为,以便您的代码不需要使用可能在 future Java 版本中更改的私有(private) API。我相信 BehaviourBase 功能目前计划在 Java 9 时间范围内转移到公共(public) API 类。

    正如原始答案中所述,除非您为库创建通用平台控件,否则您不需要子类化 Control(无论 JavaFX 8 或 9 中的新控件创建工具如何,都是如此)。

    2016 年 3 月更新

    对于 Java 9,已创建 Java 增强提案 (JEP) 和相关的 Java 错误跟踪器问题:
  • JEP 253: Prepare JavaFX UI Controls & CSS APIs for Modularization
  • JDK-8076423

  • 这项工作的目的是:

    Define public APIs for the JavaFX UI controls and CSS functionality that is presently only available via internal APIs and will hence become inaccessible due to modularization.



    链接的 JEP 和错误跟踪器文档中提供了有关自定义控件支持的 API 更改的更多信息。

    包含新 API 更改的 Java 9 早期访问版本是 available for download和测试。

    请注意,公共(public)行为 API 不是 Java 9 的一部分,目前计划在 Java 10 中实现:
  • JDK-8091189 Move BehaviorBase into public API

  • 其他资源

    如果您想要有关自定义 JavaFX 控件的深入资源,您可能希望查看有关该主题的 Hendrik Ebbers 书(我还没有读过这本书):
  • Mastering JavaFX 8 Controls (Oracle Press)
  • 关于JavaFX 2.2 从头开始​​控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12018223/

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