因此 JScrollBar 有一个构造函数,如下所示:
public JScrollBar(int orientation, int value, int extent, int min, int max)
对于 JScrollBar 的实现,我需要让 int 值很长,因为我的数据大小可能超过 int 的限制,所以类似于:
public JScrollBar(int orientation, long value, long extent, long min, long max)
对我来说,为 JScrollBar 实现这个构造函数的最佳方法是什么?是完全重新制作 JScrollBar,因为这些值无处不在?或者还有其他更好的方法来做到这一点。
注意:如果我完全重写 JscrollBar,我还必须覆盖 swing.DefaultBoundedRangeModel,因为它也需要一个 int。这似乎不是最好的方法,所以有人有更好的想法吗?
最佳答案
在某种程度上,为了正确检测实际变化,您将耗尽屏幕分辨率。要么滚动内容,但滚动条不会移动。或者,用户将移动滚动条以传送到新区域,从而造成迷失方向。
一个 32 位整数累加起来是 20 亿个正数。如果您的屏幕分辨率甚至是 1,000 像素,用户将无法控制滚动条,因为滚动条上的任何像素移动都将代表您滚动的目标中的 2,147,483 个像素(如果您的缩放比例为 1:1)。所以我可能会想一种方法将缩放级别映射到滚动条上,以便您可以在任何级别滚动并且滚动会很平滑。
其他选项可能是使用概述/详细信息控件,该控件显示一张小图片,其中有一个正方形显示您在大图像中的位置,然后放大显示。您可以拖动上图中的图片并在详细图像中查看其结果。问题是,如果你只移动一个像素,你仍然会有 200 万像素的移动,因此在小缩放比例下移动这么大的图像将会非常迷失方向。但是,在详细 View 中使用手拖动来进行较小的移动,这样就不会迷失方向。这解决了重新实现 JScrollBar 的问题,可能是更好的选择。
关于java - 如何让 JScrollBar 在构造函数中采用长值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7920454/