2

所以有一个 JScrollBar 的构造函数,如下所示:

public JScrollBar(int orientation, int value, int extent, int min, int max) 

对于我的 JScrollBar 实现,我需要将 int 值设置为 long,因为我的数据大小可能超过 int 的限制,因此类似于:

public JScrollBar(int orientation, long value, long extent, long min, long max) 

对我来说,为 JScrollBar 实现此构造函数的最佳方法是什么,是否完全重新制作 JScrollBar,因为这些值无处不在?还是有其他更好的方法来做到这一点。

注意: 如果我完全重写 JscrollBar,我也将不得不覆盖 swing.DefaultBoundedRangeModel,因为它也需要一个 int。这似乎不是最好的方法,所以有人有更好的想法吗?

4

2 回答 2

3

在某种程度上,您将耗尽屏幕分辨率以正确检测实际变化。要么你滚动内容,滚动条就不会移动。或者,用户将在被传送到新区域时移动滚动条,从而造成迷失方向。

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

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

于 2011-10-27T19:13:18.133 回答
1

我可能会尝试子类化JScrollBar并相应地覆盖setValue和调整(缩放)该值。

于 2011-10-27T18:21:46.880 回答