2016-03-05 52 views
0

我有一個滑塊,我需要它來修復int數字1-23。因此,如果用戶將它從1移開,那麼它將以1-23的任何數字結束,這與雙值不同。這個滑塊的目的是成爲一個時鐘,你拖動它並出現不同的時間。如何設置滑塊來固定位置?

我第一次嘗試:

private final int MIN_CHANGE = 1; 
.... 

timeSlider.setMax(23); 

.... 

timeSlider.valueProperty().addListener((obs, oldValue, newValue) -> { 
    if (!timeSlider.isValueChanging()) { 
     if (Math.abs(newValue.intValue()) > MIN_CHANGE) { 
      timeSlider.setValue(newValue.intValue()); 
     } 
    } 
}); 

這或多或少的作品,但僅適用於點擊,而不是拖着。

如果getValue是雙精度型,拖動時我怎麼能得到一個滑塊來修正像1-23這樣的整數?

我面對的另一個問題是拖動下午/上午改變不是突然的。

timeSlider.valueChangingProperty().addListener((obs, wasChanging, isChanging) -> { 
    if (isChanging) { 
     if(timeSlider.getValue() < 12.99) { 
      labelTest.textProperty().bind(Bindings.format("%.0f:00am", timeSlider.valueProperty())); 
     } else { 
      labelTest.textProperty().bind(Bindings.format("%.0f:00pm", timeSlider.valueProperty())); 
     } 
    } 
}); 
+0

我想你正在尋找[Slider#blockIncrementProperty()](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Slider.html#blockIncrementProperty) – ItachiUchiha

+0

@IchichiUchiha正是我在找什麼對於!謝謝。 am/pm更新怎麼樣?如何在拖動時更新它,而不僅僅是點擊?現在我可以從頭到尾拖動,上午/下午不會改變,除非我點擊13以後的任何值。 –

+0

*上午/下午不會改變,除非我點擊13 *之後的任何值。我不明白這一點。你能解釋一下你到底發生了什麼嗎? – ItachiUchiha

回答

0

嘗試設置snapToTicks爲true,並且主刻度間隔,以23:

timeSlider.setSnapToTicks(true); 
timeSlider.setMajorTickUnit(23.0); 
timeSlider.setBlockIncrement(23.0); 
timeSlider.setMinorTickCount(0.0); // Disable minor ticks 
0

爲了使其捕捉到我所用的blockIncrement,majorTickUnit和snapToTicks號在FXML現場建設者提供了感謝ItachiUchiha,我之前沒有注意到。

僅供參考我用下面的設置

min="1.0" 
max="23.0" 
blockIncrement="1.0" 
majorTickUnit="1.0" 
minorTickCount="0" 
showTickMarks="true" 
snapToTicks="true" 

最後,要解決我的問題與AM/PM沒有更新我改變了我的方法對AM/PM結合以下

timeSlider.valueProperty().addListener((obs, oldValue, newValue) -> { 
    if (timeSlider.isValueChanging()) { 
     if (newValue.intValue() < 12) { 
      labelTest.textProperty().bind(Bindings.format("%.0f:00am", timeSlider.valueProperty())); 
     } else { 
      labelTest.textProperty().bind(Bindings.format("%.0f:00pm", timeSlider.valueProperty())); 
     } 
    } 
});