JavaFX TextArea jede 2 Sekunde automatisch aktualisieren
Hallo Leute...die frage steht Quasi schon in der Überschrift...undzwar hatte ich vor in java ein Chat zu Programmieren...die Funktion und Co habe ich schon in einer anderen Programmiersprache und ich weiß auch wie ich sie hier umsetze nur bei einer sache weiß ich mir nicht zu helfen...ich habe vor mittels JavaFX ein Fenster zu erstellen wo dann 3 TextAreas zu sehen sind 1 Text Zeile und ein Button zum abschichen der nachricht...die eine TextArea ist zur darstellung des Chat Verlaufs Verantwortlich und müsste alle 2 Sekunden automatisch aktualisiert werden...meine Frage ist jetzt also wie bekomme ich eine automatische Aktualisierung der TextArea hin? Ich möchte das alle 2 Sekunden eine Funktion aufgerufen wird zb.
public static void Chat_Read(){
//CODE
} Kann ich das ganze wie beim JFrame mit aktionlistener machen? Ein Beispiel wäre echt super...
Danke
1 Antwort
Es gibt da mehrere Lösungsmöglichkeiten:
Zum Beispiel: java.util.Timer, java.util.TimerTask, javafx.Timeline
Die Klasse ist zwar schon etwas älter, aber macht genau das, was du brauchst. Damit kannst du bestimmte Aktionen zu bestimmten Zeiten ausführen. Für jeden Timer musst du einen Thread zuordnen, der die Aktionen ausführt. Da du das ganze in JavaFX machst und du eine UI-Komponente alle 2 Sekunden aktualisieren / updaten möchtest, musst du die Aktualisierung der TextArea in dem für JavaFX vorgesehenen UI-Thread ausführen.
Platform.runLater (new Runnable ( )
{
@Override public void run ( )
{
textArea.appendText ("Hallo Welt.");
}
});
In der Dokumentation solltest du Beispiele dazu finden.
Timer:
Timer timer = new Timer ( );
// Start in 1 Sekunde
timer.schedule (new Task ( ), 1000);
// Start in einer Sekunde, Ausführung alle 2 Sekunden
timer.schedule (new Task ( ), 1000, 2000);
TimerTask:
class Task extends TimerTask
{
@Override public void run ( )
{
System.out.println ("Hallo Welt.");
}
}
Als JavaFX-Entwickler könntest du natürlich auch die Klasse Timeline benutzen.
Statt Timer, das für Hintergrundprozesse benutzt wird:
new Timer ( ).schedule (new TimerTask ( )
{
@Override
public void run ( )
{
System.out.println ("Hallo Welt.");
}
}, 0, 2000); // sofort starten (0), alle 2 Sekunden ausführen (2000)
Könntest du das ganze auch in der Timeline machen (Benutzt man auch oft, um Animationen zu erzeugen (Button blinkt usw.):
Timeline timeline = new Timeline (new KeyFrame (Duration.seconds (2), new EventHandler <ActionEvent> ( )
{
@Override
public void handle (ActionEvent event)
{
System.out.println ("Hallo Welt alle 2 Sekunden.");
}
}));
timeline.setCycleCount (Timeline.INDEFINITE); // Unendlich mal wieederholen, alle 2 Sekunden timeline.play ( ); // starten
Hoffe kann dir damit.
Im Internet wirst du genug Beispiele dazu finden.
Schau auch in den Dokumentationen.
Java 7:
http://docs.oracle.com/javase/7/docs/api/