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