我正在尝试在我的Eclipse View中实现ScrollBar
并使用此方法来设置其行为。当我运行程序时,无论List<Number> data
有多长,拇指都会像ScrollBar
一样大而无法移动。我有什么问题吗?
我已经调试了程序,只要设置了ScrollBar
最大值,拇指就会填充栏。
private void setupScrollBar(ScrollBar scrollBar, List<Number> data) {
// Set max/minimum
if (data.size() > 0) {
Comparator<Number> comparator = new Comparator<Number>() {
@Override
public int compare(Number o1, Number o2) {
return (int) (o2.doubleValue() - o1.doubleValue());
}
};
double max, min;
data.sort(comparator);
max = data.get(data.size() - 1).doubleValue();
min = data.get(0).doubleValue();
scrollBar.setMax(max);
scrollBar.setMin(min);
scrollBar.setVisibleAmount(100 * (max-min));
} else {
scrollBar.setMax(0);
scrollBar.setMin(0);
}
}
答案 0 :(得分:1)
首先,您的自定义Comparator会产生一个反向排序的List
,正如fabian所指出的那样,因为int
投射会得到1 == 1.9
1}}和1.9 == 2.8
但1 != 2.8
。
比较其订单的两个参数。返回一个负整数, 零或正整数,因为第一个参数小于,等于 到,或大于第二个。
解决此问题:
data.sort(Comparator.comparingDouble(Number::doubleValue));
之类的双重比较。 compare
个实例的Comparator
方法修改为return (int) Math.signum(o1.doubleValue() - o2.doubleValue());
另一个问题是如何设置ScrollBar
的{{3}}:(max-min)
返回ScrollBar
的全范围,因此设置此值的此属性已生成拇指以填充100%的可用空间。
你可以解决这个问题,例如你想设置一个百分比的拇指:
final double PERCENTAGE = 30.0;
scrollBar.setVisibleAmount((max-min) / 100.0*PERCENTAGE);
此代码段将导致拇指填充30%的可用空间。