2016-05-30 67 views
1

我使用JavaFX創建了一個Slider。我試圖設置它,以便以分鐘顯示時間。如何設置JavaFX Slider以格式化時間?

我已經能夠來設置的分鐘從0 - 60。我的問題是我的分都顯示正確,但我秒介於0 - 100

我該如何解決這個問題?

這裏是我創建的滑塊

<ScrollPane fx:id="RulerScroll1" hbarPolicy="NEVER" maxHeight="40" minHeight="40" pannable="true" GridPane.columnIndex="1" GridPane.hgrow="ALWAYS" GridPane.rowIndex="2">  
    <Slider fx:id="Ruler1" majorTickUnit="10" maxHeight="35" min="0" minHeight="35" minorTickCount="4" showTickLabels="true" showTickMarks="true" snapToPixel="true" /> 
</ScrollPane> 

我如何格式化它給我的價值觀,使他們能夠爲分和秒出現?

+0

你能否給我們提供你的代碼?現在不可能幫助你。 – SSchuette

+0

我添加了用於創建滑塊的代碼。我如何格式化我讀入的數字,使其以分鐘和秒顯示,即1.58而不是1.70。秒數只能計數到60 – tashtoons

回答

3

你可以使用一個StringConverter顯示Slider上的另一個控件的值,也可以使用該轉換器的SliderlabelFormatterProperty

在實施例

enter image description here

它設置Slider從0-3600的範圍內和示出了在 「15:00」 格式,每15分鐘的蜱。 Slider的值以相同格式顯示在每秒鐘的Text控件上。

public class SliderTime extends Application { 
    @Override 
    public void start(Stage primaryStage) { 
     try { 
      HBox root = new HBox(); 
      Scene scene = new Scene(root,400,400); 

      Slider sl = new Slider(0, 3600, 20); 
      sl.setMajorTickUnit(450); 
      sl.setShowTickLabels(true); 
      StringConverter<Double> stringConverter = new StringConverter<>() { 

       @Override 
       public String toString(Double object) { 
        long seconds = object.longValue(); 
        long minutes = TimeUnit.SECONDS.toMinutes(seconds); 
        long remainingseconds = seconds - TimeUnit.MINUTES.toSeconds(minutes); 
        return String.format("%02d", minutes) + ":" + String.format("%02d", remainingseconds); 
       } 

       @Override 
       public Double fromString(String string) { 
        return null; 
       } 
      }; 

      sl.setLabelFormatter(stringConverter); 

      Text text = new Text(); 

      sl.valueProperty().addListener((observable, oldValue, newValue) -> 
        text.setText(stringConverter.toString(newValue.doubleValue()))); 

      root.getChildren().addAll(sl, text); 

      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
}