2016-08-08 97 views
1

我試圖在我的Eclipse視圖中實現一個ScrollBar並使用此方法設置其行爲。當我運行程序時,無論List<Number> data多長時間,拇指都會像ScrollBar一樣大,並且無法移動。有什麼我做錯了嗎?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

由於Eclipse通常使用SWT,您如何將JavaFX與Eclipse集成? –

+0

@ greg-449我使用FXCanvas併爲它設置一個場景 'public void createPartControl(Composite parent){0} { canvas = new FXCanvas(parent,SWT.NO); SplitPane mainSplit = new SplitPane(); 場景場景=新場景(mainSplit); canvas.setScene(canvas); }' – herculanodavi

+0

@ greg-449我用e(fx)clipse – herculanodavi

回答

1

首先,您的自定義Comparator產生反向排序List和有人指出由fabian,因爲int鑄造你會得到1 == 1.91.9 == 2.81 != 2.8

比較它的兩個參數的順序。返回一個負整數 零,或者一個正整數,因爲第一個參數小於,等於 到或大於秒。

要解決這個問題:

  • 您可以使用雙比較喜歡data.sort(Comparator.comparingDouble(Number::doubleValue));
  • 或者可以修改您的Comparator實例的compare方法return (int) Math.signum(o1.doubleValue() - o2.doubleValue());

另一個問題是您如何設置ScrollBarvisibleAmountProperty(max-min)返回ScrollBar全方位,所以將此屬性設置爲該值已經產生拇指以填充100%可用空間。

您可以修復此問題,例如,你想設置一個百分比的拇指:

final double PERCENTAGE = 30.0; 
scrollBar.setVisibleAmount((max-min)/100.0*PERCENTAGE); 

這段代碼將導致拇指填充可用空間的30%。

+1

它根本不是一個好的比較器,因爲它不能滿足等式是傳遞的條件。例如。使用那個比較器你會得到'1 == 1.9'和'1.9 == 2.8',但是'1!= 2.8',所以這不符合'Comparator'的合約。 'Math.signum'應該在投射到'int'之前應用,或者應該使用'Comparator.comparingDouble(Number :: doubleValue)'... – fabian

+0

謝謝@fabian進行更正。我只注意到順序會顛倒過來,所以我完全忽略了int鑄造的問題。 – DVarga

+0

謝謝@DVarga和@fabian!它工作完美 – herculanodavi