在JavaFx Label中显示更改的值

在JavaFX中,如何使用“标签”显示随时间不断变化的值?

有很多方法可以实现这一点,最方便的是使用JavaFX的DataBinding机制:

// assuming you have defined a StringProperty called "valueProperty" Label myLabel = new Label("Start"); myLabel.textProperty().bind(valueProperty); 

这样,每次通过调用set方法更改valueProperty时,标签的文本都会更新。

如何使用SimpleDateFormat? 不需要StringUtilities类!

 private void bindToTime() { Timeline timeline = new Timeline( new KeyFrame(Duration.seconds(0), new EventHandler() { @Override public void handle(ActionEvent actionEvent) { Calendar time = Calendar.getInstance(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss"); setText(simpleDateFormat.format(time.getTime())); } } ), new KeyFrame(Duration.seconds(1)) ); timeline.setCycleCount(Animation.INDEFINITE); timeline.play(); } } 

我喜欢塞巴斯蒂安的约束性答案。

对于多样性,这是另一个基于时间修改标签文本的示例。 该示例在标签中显示数字时钟读数,其标签的文本每秒使用时间轴更改。

 import java.io.IOException; import java.net.URL; import javafx.animation.*; import javafx.event.*; import javafx.scene.control.Label; import javafx.util.Duration; import java.util.Calendar; import javafx.application.Application; import javafx.scene.Scene; import javafx.stage.Stage; public class DigitalClockSample extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws IOException { stage.setScene(new Scene(new DigitalClock(), 100, 50)); stage.show(); } } /** * Creates a digital clock display as a simple label. * Format of the clock display is hh:mm:ss aa, where: * hh Hour in am/pm (1-12) * mm Minute in hour * ss Second in minute * aa Am/pm marker * Time is the system time for the local timezone. */ class DigitalClock extends Label { public DigitalClock() { bindToTime(); } // the digital clock updates once a second. private void bindToTime() { Timeline timeline = new Timeline( new KeyFrame(Duration.seconds(0), new EventHandler() { @Override public void handle(ActionEvent actionEvent) { Calendar time = Calendar.getInstance(); String hourString = StringUtilities.pad(2, ' ', time.get(Calendar.HOUR) == 0 ? "12" : time.get(Calendar.HOUR) + ""); String minuteString = StringUtilities.pad(2, '0', time.get(Calendar.MINUTE) + ""); String secondString = StringUtilities.pad(2, '0', time.get(Calendar.SECOND) + ""); String ampmString = time.get(Calendar.AM_PM) == Calendar.AM ? "AM" : "PM"; setText(hourString + ":" + minuteString + ":" + secondString + " " + ampmString); } } ), new KeyFrame(Duration.seconds(1)) ); timeline.setCycleCount(Animation.INDEFINITE); timeline.play(); } } class StringUtilities { /** * Creates a string left padded to the specified width with the supplied padding character. * @param fieldWidth the length of the resultant padded string. * @param padChar a character to use for padding the string. * @param s the string to be padded. * @return the padded string. */ public static String pad(int fieldWidth, char padChar, String s) { StringBuilder sb = new StringBuilder(); for (int i = s.length(); i < fieldWidth; i++) { sb.append(padChar); } sb.append(s); return sb.toString(); } } 

数字时钟样本输出:

数字时钟输出

非常好的回复,谢谢jewelsea的帮助,这对我帮助很大。

我使用Java 8更新了之前以更精简格式发布的DigitalClock。 使用Java 8的添加,如Date API ,当然还有lambdas 。

  import javafx.animation.Animation; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.scene.control.Label; import javafx.util.Duration; import java.time.LocalTime; import java.time.format.DateTimeFormatter; public class DigitalClock extends Label { private static DateTimeFormatter SHORT_TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss"); public DigitalClock() { bindToTime(); } private void bindToTime() { Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(0), event -> setText(LocalTime.now().format(SHORT_TIME_FORMATTER))), new KeyFrame(Duration.seconds(1))); timeline.setCycleCount(Animation.INDEFINITE); timeline.play(); } }