JavaFX Label lässt sich nicht mehrmals färben

DerDecane

Aktives Mitglied
Hey Leute, ich schreibe gerade an einem Programm in dem ich ein leeres Label erstellen muss und das rot und grau blinken lassen muss. Da das irgendwie nicht funktioniert habe ich eine Testklasse geschrieben um mir die Denkweise anzueignen.
Code:
package meldetafel;

import javafx.application.Application;
...

public class Testklasse extends Application {

    @Override
    public void start(Stage primaryStage) throws InterruptedException {
       
        Label Signalfeld = new Label();
        Signalfeld.setPrefSize(100, 100);
        HBox box = new HBox(10);
        box.getChildren().add(Signalfeld);
       
        primaryStage.setScene(new Scene(box));
        primaryStage.show();
       
       
            Signalfeld.setStyle("-fx-background-color: grey;");
            System.out.println("grey");
            Thread.sleep(500);
            Signalfeld.setStyle("-fx-background-color: green;");
            System.out.println("green");
            Thread.sleep(500);
            Signalfeld.setStyle("-fx-background-color: blue;");
            System.out.println("blue");
            Thread.sleep(500);
            Signalfeld.setStyle("-fx-background-color: red;");
            System.out.println("red");
 
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Was jetzt passieren sollte wenn ich das Programm starte ist, dass das Feld grau ist und in der Konsole grey ausgegeben wird. Nach 500ms Wartezeit sollte es dann grün werden und es sollte grün ausgegeben werden usw.

Was aber wirklich passiert und was mich total irritiert ist folgendes:

Das Feld bleibt grau, es wird grau ausgegeben. Nach der Wartezeit bleibt das Feld immernoch grau und es wird green ausgegeben. Nach einer weiteren Wartezeit bleibt das Feld immernoch grau und es wird blue ausgegeben. Nach der nächsten Wartezeit wird das Feld plötzlich rot und es wird red ausgegeben. Sprich er gibt zwar die Wörter aus (das habe ich als Kontrolle eingefügt) aber färbt das Feld nur beim letzten "Befehl" und nicht schon vorher.

Mach ich da irgendwas falsch?
 

DerDecane

Aktives Mitglied
Das ganze ist eine Schulaufgabe, ich weiß von anderen dass es auch ohne seperate Threads geht weil mir das einige gesagt haben. Allerdings erreiche ich mal wieder niemanden (immer wenns drauf ankommt -.-)
 

Joose

Top Contributor
Ja vielleicht bietet JavaFX hier noch andere Möglichkeiten an, im Grunde läuft es aber darauf hinaus das diese Verarbeitung in einen 2.Thread läuft ;) (ob man diesen nun bewusst selber erstellt oder das Framework hier im Hintergrund zaubert)

Das Problem bei dir ist wie oben schon gesagt: JavaFX läuft in einem Thread, wenn du diesen schlafen legst (mit dem Thread.sleep(500)) kann sich die Oberfläche nicht neu zeichnen.
 

DerDecane

Aktives Mitglied
Ja aber theoretisch müsste der Thread doch 500ms "schlafen" dann aufwachen, das Feld färben und die Farbe in der Konsole ausgeben und wieder 500ms "schlafen".
 

da921610

Aktives Mitglied
Nicht ganz, dein Thread läuft ja innerhalb des JavaFx-Threads.
Er wird nicht seperat ausgeführt.
Die GUI bekommt dadurch nicht 500ms Zeit, um sich neu zu zeichnen.
Sondern wartet die GUI erst, bis die Verarbeitung abgearbeitet ist mit dem neu Zeichnen.
 

dzim

Top Contributor
Es geht auch mit einer Timeline. Der macht aber am Ende auch nen separaten Thread.

So in etwas könnte man es machen:
Java:
package application;

import java.util.concurrent.atomic.AtomicInteger;

import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.util.Duration;

public class BlinkMain extends Application {
   
    @Override
    public void start(Stage primaryStage) throws InterruptedException {
       
        Label signalfeld = new Label();
        signalfeld.setPrefSize(100, 100);
        HBox box = new HBox(10);
        box.getChildren().add(signalfeld);
       
        primaryStage.setScene(new Scene(box));
        primaryStage.show();
       
        AtomicInteger counter = new AtomicInteger(0);
        final Timeline tl = new Timeline(new KeyFrame(Duration.millis(500), new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                switch (counter.getAndIncrement()) {
                case 0:
                    signalfeld.setStyle("-fx-background-color: grey;");
                    break;
                case 1:
                    signalfeld.setStyle("-fx-background-color: green;");
                    break;
                case 2:
                    signalfeld.setStyle("-fx-background-color: blue;");
                    break;
                case 3:
                    signalfeld.setStyle("-fx-background-color: red;");
                    break;
                default:
                    signalfeld.setStyle("-fx-background-color: black;");
                    break;
                }
            }
        }));
        tl.cycleCountProperty().set(4);
        tl.play();
    }
   
    public static void main(String[] args) {
        launch(args);
    }
}

Noch ein Hinweis: Da du ja noch am Lernen bist, gewöhne dir bitte den Java Code Style an. Stein des Anstosses: In Java beginnen Variablen mit kleinem Buchstaben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
ralfb1105 JavaFX Label lässt sich innerhalb service Task nicht updaten? AWT, Swing, JavaFX & SWT 22
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
H JavaFX Label.Text mit bind an DoubleProperty binden AWT, Swing, JavaFX & SWT 3
izoards Ausdruck auf Label Drucker AWT, Swing, JavaFX & SWT 1
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
H RPG Programmieren, label.setLocation funktioniert nicht AWT, Swing, JavaFX & SWT 7
Jose05 Javafx Label Höhe=Breite AWT, Swing, JavaFX & SWT 1
N javafx Position der Bustaben finden label AWT, Swing, JavaFX & SWT 1
N Label Schriftart Ändern javafx AWT, Swing, JavaFX & SWT 2
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
J JavaFX Label aktualisieren AWT, Swing, JavaFX & SWT 18
M JavaFX javaFX Label-Text wird nicht gesetzt AWT, Swing, JavaFX & SWT 3
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
I BoxLayout zentriert Label nicht AWT, Swing, JavaFX & SWT 7
B Ausgaben einer Umrechnung vom Textfeld in ein Label AWT, Swing, JavaFX & SWT 2
R JavaFX Label oder Imageview anzeigen mit Buttonklick AWT, Swing, JavaFX & SWT 4
L Label im JavaFX Thread Updaten AWT, Swing, JavaFX & SWT 3
A Inhalt wechseln bei Klick auf Label AWT, Swing, JavaFX & SWT 8
Trèfle JavaFX Formattierung im Label AWT, Swing, JavaFX & SWT 3
ralfb1105 JavaFX Wie Text Label in neuem Window von Main Stage setzen? AWT, Swing, JavaFX & SWT 6
F Countdown in Label anzeigen AWT, Swing, JavaFX & SWT 14
H JavaFX - Label aktualisieren AWT, Swing, JavaFX & SWT 1
J Dateiname im Label einblenden AWT, Swing, JavaFX & SWT 4
C SWT autosize bei gc.drawString() auf einem Label AWT, Swing, JavaFX & SWT 7
xYurisha Aus einer Gui Buttons, Label und ProgessBars entfernen AWT, Swing, JavaFX & SWT 4
T Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
zhermann FX Label text wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 12
zhermann NullPointerException bei Label.setText() AWT, Swing, JavaFX & SWT 5
T JavaFX Label mit mehreren Images AWT, Swing, JavaFX & SWT 11
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
L JavaFX ContextMenu bei Label mit Linksklick AWT, Swing, JavaFX & SWT 4
J JavaFX - Felder (Label) in einer ForSchleife bearbeiten AWT, Swing, JavaFX & SWT 4
N Anordnung der Label AWT, Swing, JavaFX & SWT 3
N Swing Label auf Panel legen.. AWT, Swing, JavaFX & SWT 2
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
M Text in einem Label fett setzen AWT, Swing, JavaFX & SWT 4
D Swing JFreeChart Crosshair Label - setPreferredSize oder ähnliches, aber wo ? AWT, Swing, JavaFX & SWT 1
T CSS Rechtsbüdniges Label mit Zwei Zeilen AWT, Swing, JavaFX & SWT 7
J JavaFX Translation Text/Label AWT, Swing, JavaFX & SWT 2
Tom299 JavaFX Text oder Label benutzen AWT, Swing, JavaFX & SWT 4
C Textfeld und Label werden nicht angezeigt (Ubuntu) AWT, Swing, JavaFX & SWT 2
C SWT Treeview mit Bilder im Label verändert Expanded Icon AWT, Swing, JavaFX & SWT 1
Augenblau JavaFX Wechselnde Werte in Label darstellen AWT, Swing, JavaFX & SWT 7
V Swing Brauche Hilfe mit Label AWT, Swing, JavaFX & SWT 3
S JButton-Label vergrößern AWT, Swing, JavaFX & SWT 2
M label mit icon verschieben. AWT, Swing, JavaFX & SWT 1
B Swing JXMapKit Mausemove in Label anzeigen AWT, Swing, JavaFX & SWT 0
K Bild in Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
G Label wird nicht erstellt AWT, Swing, JavaFX & SWT 0
7 AWT problem: KeyListener/ test im Label umändern AWT, Swing, JavaFX & SWT 4
W JavaFX Label in Controller-Klasse in einer anderen Controller-Klasse ändern AWT, Swing, JavaFX & SWT 9
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
G Label erstellen AWT, Swing, JavaFX & SWT 6
U Label zeigt nicht überall HTML Zeichen AWT, Swing, JavaFX & SWT 3
F JavaFX label.getWidth() AWT, Swing, JavaFX & SWT 2
T Swing Label aus anderer Methode bearbeiten AWT, Swing, JavaFX & SWT 2
N Input/Output Stream werte in Label anzeigen. AWT, Swing, JavaFX & SWT 6
R JavaFX Label ändern in aufgerufener AnchorPane AWT, Swing, JavaFX & SWT 3
B Swing label.setText() macht probleme AWT, Swing, JavaFX & SWT 5
G JavaFX CSS: Label in GridPane rechts ausrichten AWT, Swing, JavaFX & SWT 9
T Swing Aktuelle Größe eines Textes in einem Label darstellen AWT, Swing, JavaFX & SWT 3
KrokoDiehl Swing Buchstaben im Label anders färben AWT, Swing, JavaFX & SWT 4
K Zugriff auf Label und Ereignisbehandlung durch zwei Handlerklassen AWT, Swing, JavaFX & SWT 3
P Label rotieren mit Timer AWT, Swing, JavaFX & SWT 5
C Label wird nicht an der richtigen Position angezeigt.. AWT, Swing, JavaFX & SWT 7
H Label mit Icon positionieren AWT, Swing, JavaFX & SWT 14
E Netbeans: Buttons mit Label bzw. Rahmen unterlegen AWT, Swing, JavaFX & SWT 8
J resize - Label bleibt erst schwarz AWT, Swing, JavaFX & SWT 4
T label überschriebt seine werte-SWT AWT, Swing, JavaFX & SWT 3
O Swing JTree um Label (oder Panel) erweitern AWT, Swing, JavaFX & SWT 9
D Label über JScrollPane AWT, Swing, JavaFX & SWT 3
N Label auf Hauptfenster manipulieren AWT, Swing, JavaFX & SWT 2
S VAADIN: Problem mit Label AWT, Swing, JavaFX & SWT 18
P Ausgabe Label AWT, Swing, JavaFX & SWT 6
GUI-Programmer Informations-Panel an Label AWT, Swing, JavaFX & SWT 2
S ImageIcon von Label entfernen AWT, Swing, JavaFX & SWT 9
B Label breite ermitteln vor dem rendern? AWT, Swing, JavaFX & SWT 7
A Bekomme das Label nicht in die Mitte von Reihe AWT, Swing, JavaFX & SWT 7
H SWT Markierbares Label AWT, Swing, JavaFX & SWT 8
A Swing Box Label ausrichten AWT, Swing, JavaFX & SWT 3
R Label in den Vordergrund einblenden AWT, Swing, JavaFX & SWT 5
J Hintergrund Label-Frame AWT, Swing, JavaFX & SWT 3
O Swing Label(bzw. Grafik) verdekt von anderm Label AWT, Swing, JavaFX & SWT 2
A TextField und Label AWT, Swing, JavaFX & SWT 8
L Label dynamisch awt AWT, Swing, JavaFX & SWT 2
J Label mit transparentem hintergrund - geht das? AWT, Swing, JavaFX & SWT 21
B Die Werte von getLocation() im Label anzeigen AWT, Swing, JavaFX & SWT 4
Avalarion SWT Listener auf Label oder Text Teile AWT, Swing, JavaFX & SWT 10
C Label Hintergrundbild mit Text AWT, Swing, JavaFX & SWT 6
A SWT - Farbe von Text auf Label ändern AWT, Swing, JavaFX & SWT 2
M gridbaglayout - abstand bei label und field AWT, Swing, JavaFX & SWT 8
hdi SWT Label Text vertikal zentrieren AWT, Swing, JavaFX & SWT 6
T In einem Label scrollen AWT, Swing, JavaFX & SWT 3
Spot84 swt label zeilenumbruch will nicht funktionieren AWT, Swing, JavaFX & SWT 1
L JFreeChar Label für StackedBar AWT, Swing, JavaFX & SWT 3
lumo SWT Label - onResize? AWT, Swing, JavaFX & SWT 5
DasDogma AWT Problem bei Wertzuweisung für Label AWT, Swing, JavaFX & SWT 3
A Label hat falsche Position AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben