因此,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像素,那么用户将无法控制滚动条,因为滚动条上的任何像素移动都将代表您要滚动的目标(如果缩放比例为1:1)为2,147,483像素。因此,我可能想到了一种将缩放级别映射到滚动条上的方法,以便您可以在任何级别上滚动,并且平滑。
其他选项可能是使用概述/详细信息控件,该控件显示一幅小图片,并在方框中显示您在大图片中的位置,然后放大显示。您可以在上部图像中拖动图片,然后在详细图像中查看其结果。问题是,如果仅移动一个像素,您仍然有200万像素的移动,因此在以小缩放比例放大的图像周围移动将非常令人迷惑。但是,请在详细信息视图中使用手拖动来进行较小的移动,这些移动不会使人迷失方向。那一步解决了重新实现JScrollBar的问题,可能是更好的选择。