2011-10-27 119 views
2

因此,有JScrollBar的一个构造,看起来像:我怎样才能让JScrollBar在构造函数中占用很长的值?

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

对于我实现JScrollBar中的我需要有国际价值是长久以来我的数据的大小可以超过INT的局限性,所以是这样的:

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

什么是我实现这个构造JScrollBar的,这将是完全地重拍的JScrollBar的最好方式,因为这些值是无处不在?或者有没有其他更好的方式来做到这一点。

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

回答

3

在某些级别,您将耗尽屏幕分辨率,以便正确检测实际更改。要么滚动内容,滚动条不会移动。或者,用户会将被传送的滚动条移动到新的区域,造成迷失方向。

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

其他选项可能是使用概览/细节控件,该控件显示一个小图片,其中一个正方形显示您在较大图像中的位置,然后是一个放大显示。您可以拖动上面的图片中的图片,并在详细图片中看到它的结果。这里存在的问题是,如果将它仅移动一个像素,您仍然会有200万像素的移动,所以在小缩放比例下移动大图像会让人迷惑不解。但是,使用细节视图中的手拖动不会造成迷惑的小运动。这方面的步骤重新实现JScrollBar的问题,并可能会更好的选择。

+1

我在一堆数据中缓冲,所以说范围是从1 - 100,他们在位置56;如果他们点击滚动条,它将位于第57位,而不是滚动条所在的位置的图形表示......我希望这有意义吗? – Grammin

+0

听起来像你只是想创建一个可缩放的控制映射,但以一种奇怪的方式。如果您使用滚动条并且它有1000个位置(即滚动条宽度为1000像素或高度),那么拇指移动的每个像素代表200万像素,如果滚动条覆盖可滚动最右侧的最左侧。否则,您无法从左向右浏览完整图像。我认为出于实用性,您将需要创建放大和缩小的概念,并且使用缩放级别滚动以有效地导航空间。 – chubbsondubs

+0

我同意你的看法,即每个滚动条像素移动都代表2mp,但我可以单击最右侧的滚动箭头,但不移动滚动条,但仍然移动数据。因此调整我的滚动条的值而不用移动实际的滚动条。 – Grammin

1

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

相关问题