【问题标题】:Raw Java 2D implementation of a scrollbar滚动条的原始 Java 2D 实现
【发布时间】:2008-10-15 20:35:47
【问题描述】:

我将如何使用标准 Java 2D 编写自己的滚动条。

我真的不想使用swing,而且我已经为其他所有东西(例如按钮等)制作了自己的组件。

我并不是真的在寻找代码,而是在事件更改和绘图中涉及的数学。

【问题讨论】:

    标签: java scrollbar java-2d


    【解决方案1】:

    您到底为什么要编写自己的 java GUI 工具包?你已经有了 Swing 和 SWT 的选择,你真的能比这两个团队做得更好吗?

    如果您已经编写了工具包的其余部分,我不明白为什么滚动条会难倒您。如果不了解您的事件系统或自定义组件的结构,就不可能给出太多建议。我认为这不是特别密集的数学 - 只需保持可滚动组件的高度及其所在的视图,滚动条大小应与可见组件的比例相匹配。滚动条的位置应该与组件的哪个部分可见(这必须被缩放)。具体来说,你想知道什么?

    【讨论】:

    • Swing 臃肿,内部使用 Vector。就优化代码而言,它肯定不是最好的。意见:SWT 的编程模型比 Swing 还要糟糕。两者都有很多不足之处。
    • 也许,但现代 Swing 应用程序的最终用户体验可以说与其他任何应用程序一样好,这几乎没有理由自己编写整个 GUI 框架。你仍然不太可能做得更好。这取决于它如何/在哪里使用 Vector 是否不好。
    【解决方案2】:

    Java 现已打开。我会去查看 Swing 和/或 SWT 的源代码,因为它们已经实现了。数学似乎相当简单。你有一个酒吧和一个容器。为简化起见,我们将只讨论长度(滚动条移动的维度)。容器有一定的长度。条的长度等于或小于容器。定义滚动条的中心和两个端点很有用。您可以让滚动条从顶部的 0 和底部的 1 开始,或者从顶部的 0 和底部的 100 开始,重要的部分是以相同的方式定义滚动条。然后,您可以检查端点是否与边缘发生碰撞,以阻止杆移动。如果鼠标在光标位于条内坐标上的情况下按住不放,则条开始关心光标的位置,并将绘制滚动条以及滚动条最终应该影响的任何内容。因此,您需要将受影响的页面映射到 0 和 1 * 滚动条的像素比例。然后你会担心两端的箭头,每次点击有多大的跳跃,以及处理 mousedown 事件等。使用给定的东西,不要重新发明轮子。

    【讨论】:

      【解决方案3】:

      虽然不是 Java2D,但这个简单的代码 sn-p 可能会有所帮助:

      http://processing.org/learning/topics/scrollbar.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-06
        • 1970-01-01
        • 1970-01-01
        • 2012-02-23
        • 2020-07-07
        • 1970-01-01
        • 1970-01-01
        • 2014-02-01
        相关资源
        最近更新 更多