W języku JavaFX, w jaki sposób wyświetlić wartości, które zmieniają się w czasie za pomocą "etykiety"?Wyświetlanie zmieniających się wartości w etykiecie JavaFx
Odpowiedz
Istnieje wiele sposobów, aby to osiągnąć, najwygodniejszym byłoby użyć JavaFX jest mechanizm wiązania z danymi:
// assuming you have defined a StringProperty called "valueProperty"
Label myLabel = new Label("Start");
myLabel.textProperty().bind(valueProperty);
W ten sposób, za każdym razem, gdy valueProperty zostaje zmieniony poprzez wywołanie to ustawić metodę, tekst na etykiecie jest aktualizowany .
Podoba mi się wiążąca odpowiedź Sebastiana.
Dla odmiany, oto kolejna próbka modyfikacji tekstu etykiety na podstawie czasu. Próbka wyświetla cyfrowy odczyt zegara na etykiecie, którego tekst zmienia się co sekundę przy użyciu Timeline.
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<ActionEvent>() {
@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();
}
}
Cyfrowe wyjście próbka zegar:
Jak na temat korzystania SimpleDateFormat? Nie ma potrzeby używania klasy StringUtilities!
private void bindToTime() {
Timeline timeline = new Timeline(
new KeyFrame(Duration.seconds(0),
new EventHandler<ActionEvent>() {
@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();
}
}
Doskonałe odpowiedzi, dziękuję jewelsea za twój wkład bardzo mi pomogło.
Zaktualizowałem funkcję DigitalClock opublikowaną wcześniej w szczuplejszym formacie, używając Java 8. Korzystanie z dodatków Java 8, takich jak Date API i oczywiście 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();
}
}
- 1. Kolejność zmieniających się wartości za pomocą R?
- 2. Utrzymywanie zmieniających się obiektów posortowanych w drzewkach przez cały czas
- 3. Widok z recyklingu na wartościach przewijania zmieniających się z adaptera
- 4. Wyświetlanie elementów z bazy danych w JavaFX TableView
- 5. Wyświetlanie wartości następujących po sobie
- 6. Wyświetlanie wartości obiektów symfony w szablonie gałązkowym
- 7. Wyświetlanie obrazu na podstawie wartości w XAML
- 8. Wyświetlanie wartości od prywatnej int w C#
- 9. Pasek przewijania na etykiecie
- 10. Google Maps & JavaFX: Wyświetlanie znacznika na mapie po kliknięciu przycisku JavaFX
- 11. Zmienianie tekstu na etykiecie
- 12. JavaFX TableView dynamiczne wartości kolumn i danych
- 13. Jak dodać znacznik wartości do wykresu JavaFX?
- 14. Detektor zmian wartości dla TextField JavaFX
- 15. Wyświetl liczby całkowite tylko w etykiecie AxisY?
- 16. Jak wyłączyć wyświetlanie wartości zakresu na IE
- 17. Wyświetlanie wartości z wyrażenia klauzula HAVING
- 18. Kibana 4 DateTime Wyświetlanie Lokalne wartości
- 19. Wyświetlanie liczby zmiennoprzecinkowej jako wartości procentowej bez zmiany wartości numeru
- 20. Jak ustawić wartość na etykiecie osi x w achartengine
- 21. Przycisk na etykiecie
- 22. Wyświetlanie typu i wartości z Reason
- 23. Dlaczego nie pojawia się na etykiecie Windows Forms?
- 24. Czy możliwe jest wyświetlanie wartości w systemie indyjskim w ZingChart?
- 25. Układ JavaFX skalujący się z rodzicem
- 26. Jak wypełnić wartości list do combobox w JavaFx
- 27. JavaFx: Obramowanie przycisku i unosić się
- 28. Projekt Javafx nie kompiluje się z maven
- 29. Litery podrzędne w etykiecie osi ggplot
- 30. Ustawianie wartości i wyświetlanie tekstu w Androidzie Spinner