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