【发布时间】:2008-10-15 20:35:47
【问题描述】:
我将如何使用标准 Java 2D 编写自己的滚动条。
我真的不想使用swing,而且我已经为其他所有东西(例如按钮等)制作了自己的组件。
我并不是真的在寻找代码,而是在事件更改和绘图中涉及的数学。
【问题讨论】:
我将如何使用标准 Java 2D 编写自己的滚动条。
我真的不想使用swing,而且我已经为其他所有东西(例如按钮等)制作了自己的组件。
我并不是真的在寻找代码,而是在事件更改和绘图中涉及的数学。
【问题讨论】:
您到底为什么要编写自己的 java GUI 工具包?你已经有了 Swing 和 SWT 的选择,你真的能比这两个团队做得更好吗?
如果您已经编写了工具包的其余部分,我不明白为什么滚动条会难倒您。如果不了解您的事件系统或自定义组件的结构,就不可能给出太多建议。我认为这不是特别密集的数学 - 只需保持可滚动组件的高度及其所在的视图,滚动条大小应与可见组件的比例相匹配。滚动条的位置应该与组件的哪个部分可见(这必须被缩放)。具体来说,你想知道什么?
【讨论】:
Java 现已打开。我会去查看 Swing 和/或 SWT 的源代码,因为它们已经实现了。数学似乎相当简单。你有一个酒吧和一个容器。为简化起见,我们将只讨论长度(滚动条移动的维度)。容器有一定的长度。条的长度等于或小于容器。定义滚动条的中心和两个端点很有用。您可以让滚动条从顶部的 0 和底部的 1 开始,或者从顶部的 0 和底部的 100 开始,重要的部分是以相同的方式定义滚动条。然后,您可以检查端点是否与边缘发生碰撞,以阻止杆移动。如果鼠标在光标位于条内坐标上的情况下按住不放,则条开始关心光标的位置,并将绘制滚动条以及滚动条最终应该影响的任何内容。因此,您需要将受影响的页面映射到 0 和 1 * 滚动条的像素比例。然后你会担心两端的箭头,每次点击有多大的跳跃,以及处理 mousedown 事件等。使用给定的东西,不要重新发明轮子。
【讨论】:
虽然不是 Java2D,但这个简单的代码 sn-p 可能会有所帮助:
【讨论】: