定义Max和Min时,ScrollBar卡住了

时间:2016-08-08 12:39:51

标签: java javafx eclipse-plugin scrollbar

我正在尝试在我的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);
    }
}

1 个答案:

答案 0 :(得分:1)

首先,您的自定义Comparator会产生一个反向排序的List,正如fabian所指出的那样,因为int投射会得到1 == 1.9 1}}和1.9 == 2.81 != 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%的可用空间。