如何让JScrollBar在构造函数中获取长值?

时间:2011-10-27 18:19:52

标签: java swing jscrollbar

因此,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。这似乎不是最好的方法,所以有人有更好的想法吗?

2 个答案:

答案 0 :(得分:3)

在某种程度上,您将耗尽屏幕分辨率以便正确检测实际更改。您要么滚动内容,滚动条也不会移动。或者,用户将移动滚动条传送到新区域,从而产生迷失方向。

32位整数运行是20亿个正数。如果屏幕分辨率甚至是1000像素,则用户将无法控制滚动条,因为滚动条上的像素移动将代表您滚动的目标中的2,147,483像素(如果您的缩放是1:1)。因此,我可能会想到一种将缩放级别映射到滚动条上的方法,以便您可以在任何级别滚动并且它将是平滑的。

其他选项可能是使用概览/细节控件来显示一张小图片,其中一个正方形显示您在较大图像中的位置,然后是放大显示。您可以拖动上方图像中的图片,并在详细图像中查看结果。问题在于,如果你只移动一个像素,你仍然有这个200万像素的移动,所以在小尺寸缩放比例的图像周围移动会非常迷惑。但是,在细节视图中使用手拖动来进行较小的移动,而不是迷失方向。这一方面解决了重新实现JScrollBar的问题,可能是更好的选择。

答案 1 :(得分:1)

我可能会尝试继承JScrollBar并覆盖setValue并相应地调整(缩放)该值。