【问题标题】:How can I set the JavaFX Slider to format for time?如何将 JavaFX 滑块设置为时间格式?
【发布时间】:2016-05-30 05:07:18
【问题描述】:

我使用 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>

如何格式化它给我的值,以便它们可以显示为分钟和秒?

【问题讨论】:

  • 您能提供给我们您的代码吗?目前无法为您提供帮助。
  • 我添加了用于创建滑块的代码。如何格式化我读入的数字,使其显示为分钟和秒,即 1.58 而不是 1.70。秒数最多只能计算到 60

标签: java datetime javafx slider javafx-8


【解决方案1】:

您可以使用StringConverter 在另一个控件上显示Slider 的值,也可以将此转换器用于SliderlabelFormatterProperty

示例中

它将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);
    }
}

【讨论】:

    猜你喜欢
    • 2010-12-02
    • 2018-02-23
    • 2013-12-18
    • 1970-01-01
    • 2018-04-03
    • 2021-07-27
    • 1970-01-01
    • 2012-11-07
    • 2017-10-03
    相关资源
    最近更新 更多