In JavaFX, come posso visualizzare valori che cambiano continuamente nel tempo utilizzando "etichetta"?Visualizzazione dei valori di modifica nell'etichetta JavaFx
risposta
ci sono molti modi per raggiungere tale, il più conveniente sarebbe quella di utilizzare il meccanismo DataBinding di JavaFX:
// assuming you have defined a StringProperty called "valueProperty"
Label myLabel = new Label("Start");
myLabel.textProperty().bind(valueProperty);
In questo modo, ogni volta che il ValueProperty viene cambiato chiamando è il metodo impostato, il testo dell'etichetta viene aggiornato .
Mi piace la risposta vincolante di Sebastian.
Per varietà, ecco un altro esempio di modifica di un testo di etichetta in base al tempo. L'esempio mostra una lettura digitale dell'orologio in un'etichetta il cui testo cambia ogni secondo utilizzando 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();
}
}
esempio di output di clock digitale:
Come sull'utilizzo SimpleDateFormat? Non c'è bisogno della classe 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();
}
}
Risposte eccellenti, grazie jewelsea per il tuo contributo mi ha aiutato molto.
Ho aggiornato il DigitalClock pubblicato in precedenza in un formato più snello utilizzando Java 8. Utilizzando le aggiunte di Java 8 come Date API e ovviamente lo 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. Modifica e visualizzazione dei cookie
- 2. Modifica dei valori in HashSet
- 3. Nome barra dei menu di modifica di Javafx
- 4. Visualizzazione dei valori dei pacchetti di parametri in gdb
- 5. Modifica dei valori dei passaggi nella barra di ricerca?
- 6. PHPUnit: visualizzazione forzata dei valori asseriti
- 7. Modifica dei valori delle variabili nelle sottoclassi?
- 8. Visualizzazione dei valori dei punti per impostazione predefinita su ZedGraph
- 9. Associazione JavaFX e valori nulli
- 10. Visualizzazione dei valori dell'oggetto symfony nel modello di ramoscello
- 11. Rimozione dei bordi di ListView JavaFX
- 12. Localizzazione dei controlli JavaFx
- 13. Modifica visualizzazione su Buttonclick
- 14. C#: modifica dei valori per ogni elemento di un array
- 15. Modifica valori pixel
- 16. JavaFX Scene Builder - Utilizzo di valori variabili
- 17. JavaFX ComboBox modifica il valore causa IndexOutOfBoundsException
- 18. Visualizzazione grafica (come yFiles) in JavaFX
- 19. Visualizzazione dei valori che si verificano in sequenza
- 20. Visualizzazione dei valori delle variabili in runtime in VisualStudio
- 21. Modifica dei valori di più colonne di un dataframe panda utilizzando colonna valori noti
- 22. Modifica dei valori Maven pom.xml <properties> fisicamente
- 23. Modifica dei valori del dizionario in un ciclo foreach
- 24. Modifica dei valori dell'array nella funzione - Assemblaggio in linea
- 25. Vai: modifica al posto dei valori della mappa
- 26. Passare argomenti con la modifica dei valori in Attività - Comportamento?
- 27. Modifica dei valori dei parametri prima dell'invio al costruttore di base
- 28. Listener di modifica del valore per il TextField di JavaFX
- 29. Modifica visualizzazione ticket in Trac
- 30. JavaFX: Incorporamento di un browser diverso dalla visualizzazione Web disponibile con JavaFX