Ampel mit Javafx

lennero

Bekanntes Mitglied
Hallo. Ich möchte eine einfache Ampel mit delays programmieren. Folgender Code spuckt zwar keine Fehler aus, aber funktionieren tut es auch nicht ...



Java:
package vorb7;


import java.awt.Shape;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class Grafik extends Application{

    private boolean ampelAn;
    private int z =0;

    public static void main(String []args){

        launch(args);


    }

    @Override
    public void start(Stage pStage) throws Exception {

        StackPane sp = new StackPane();
        Circle circle1 = new Circle();
        circle1.setRadius(100);
        circle1.setFill(Color.GREY);
        Circle circle2 = new Circle();
        circle2.setRadius(100);
        circle2.setFill(Color.GREY);
        Circle circle3 = new Circle();
        circle3.setRadius(100);
        circle3.setFill(Color.GREY);
        VBox vb = new VBox();

        VBox vbt = new VBox();

        Button b1 = new Button();
        b1.setText("Start");




        b1.setOnAction(e-> {

            ampelAn = true;
            circle1.setFill(Color.RED);

            while(ampelAn){
            switch(z){

            case 0:
                try{
                    Thread.sleep(3000);
                }

                catch(InterruptedException e1){
                    Thread.currentThread().interrupt();
                }

            circle2.setFill(Color.YELLOW);
            z=1;

            case 1:
                try{
                    Thread.sleep(1000);
                    }

                catch(InterruptedException e2){
                    Thread.currentThread().interrupt();
                    }

                circle1.setFill(Color.GREY);
                circle2.setFill(Color.GREY);
                circle3.setFill(Color.GREEN);
                z=2;

            case 2:
                circle3.setFill(Color.GREY);
                z=0;
                }

            }






        });

        Button b2 = new Button();
        b2.setText("Stopp");

        b2.setOnAction(e-> {

            ampelAn = false;

        });




        vbt.getChildren().addAll(b1,b2);
        vbt.setAlignment(Pos.BASELINE_LEFT);
        vbt.setSpacing(15);
        vbt.setPadding(new Insets(10,10,10,10));

        vb.getChildren().addAll(circle1,circle2,circle3);
        vb.setAlignment(Pos.CENTER);
        sp.getChildren().addAll(vb,vbt);


        Scene scene = new Scene(sp,600,600);

        pStage.setTitle("Formen");
        pStage.setScene(scene);
        pStage.show();


    }


}
 

JCODA

Top Contributor
Sobald du einmal den Button drückst, bist du in einer Endlosschleife. Damit wird dein Fenster nicht neu gezeichnet. Verwende für solche Dinge einen Timer.
Zudem: Thread.sleep legt zusätzlich dein Programm lahm. Auch hier: das Fenster kann nicht neu gezeichnet werden. (Falls Thread.sleep im GUI_Thread ausgeführt wird.)
Ich hätte sowas in der Richtung gemacht:

Java:
import java.util.Timer;
import java.util.TimerTask;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class Grafik extends Application {

    private int state = 0;
    private Circle[] circles = new Circle[3];
    private Timer timer = new Timer();
    private TimerTask tt = null;

    public static boolean states[][] = { { true, false, false }, { true, true, false }, { false, false, true },
            { false, true, false } };
    public static Color colors[] = { Color.RED, Color.YELLOW, Color.GREEN };

    public static void main(String[] args) {
        launch(args);
    }

    public void nextState() {
        state++;
        boolean[] currentState = states[state % 4];
        for (int i = 0; i < 3; i++) {
            if (currentState[i]) {
                circles[i].setFill(colors[i]);
            } else {
                circles[i].setFill(Color.GRAY);
            }
        }
    }

    public void startTimer() {
        if(tt != null){
            tt.cancel();
        }
        tt = new TimerTask() {
            @Override
            public void run() {

                nextState();
            }
        };
        timer.schedule(tt, 0, 2000);
    }

    @Override
    public void start(Stage pStage) throws Exception {

        StackPane sp = new StackPane();
        VBox vb = new VBox();
        vb.setAlignment(Pos.CENTER);
        for(int i = 0 ; i < 3 ; i++){
            circles[i] = new Circle();
            circles[i].setRadius(100);
            circles[i].setFill(Color.GREY);
            vb.getChildren().add(circles[i]);
        }   
       
        VBox vbt = new VBox();

        Button startbtn = new Button("Start");   
        Button stoppbtn = new Button("Stopp");
       
        startbtn.setOnAction(e -> startTimer());
        stoppbtn.setOnAction(e -> tt.cancel());
       
        vbt.getChildren().addAll(startbtn, stoppbtn);
        vbt.setAlignment(Pos.BASELINE_LEFT);
        vbt.setSpacing(15);
        vbt.setPadding(new Insets(10, 10, 10, 10));
       
        sp.getChildren().addAll(vb, vbt);

        Scene scene = new Scene(sp, 600, 600);

        pStage.setTitle("Ampelsteuerung");
        pStage.setScene(scene);
        pStage.show();

    }

}
 

lennero

Bekanntes Mitglied
Danke für die Hilfe. Hiermit klappt es, allerdings nur 1 mal. Wieso kann ich hier keine Endlosschleife verwenden ?
Java:
b1.setOnAction(e-> {
           
           
            ampelAn = true;
            circle1.setFill(Color.RED);

           
           
                Timer z1 = new Timer();
                TimerTask a1 = new TimerTask() {

                    @Override
                    public void run() {
                        circle2.setFill(Color.YELLOW);
                    }
                };
               
                Timer z2 = new Timer();
                TimerTask a2 = new TimerTask(){

                    @Override
                    public void run() {
                        circle1.setFill(Color.GREY);
                        circle2.setFill(Color.GREY);
                        circle3.setFill(Color.GREEN);
                       
                    }
                   
                };
               
                Timer z3 = new Timer();
                TimerTask a3 = new TimerTask(){

                    @Override
                    public void run() {
                        circle1.setFill(Color.GREY);
                        circle2.setFill(Color.GREY);
                        circle3.setFill(Color.GREY);
                       
                    }
                   
                   
                };
               
               
               
               
                z1.schedule(a1, 3000);
                z2.schedule(a2, 4000);
                z3.schedule(a3, 8000);
           







        });

        Button b2 = new Button();
        b2.setText("Stopp");

        b2.setOnAction(e-> {
           
            ampelAn = false;

        });
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Ampel graphisch darstellen AWT, Swing, JavaFX & SWT 2
D GUI Ampel AWT, Swing, JavaFX & SWT 7
M Anpassen der Größe eines JPanels (incl. gezeichneter Ampel) AWT, Swing, JavaFX & SWT 2
C Ampel AWT, Swing, JavaFX & SWT 4
Juelin Javafx hängt sich auf AWT, Swing, JavaFX & SWT 31
Juelin StringGrid in SceneBuilder und javaFX AWT, Swing, JavaFX & SWT 2
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 38
Juelin javax.swing in javafx AWT, Swing, JavaFX & SWT 1
MiMa JUnit5 im JavaFX Projekt AWT, Swing, JavaFX & SWT 2
Juelin in javafx Event auslösen AWT, Swing, JavaFX & SWT 4
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
MiMa SwingFXUtils in JavaFX 20 AWT, Swing, JavaFX & SWT 6
MiMa JavaFX Fenstertitel zu klein. AWT, Swing, JavaFX & SWT 1
MiMa JavaFX JAR unter Windows ausführen schlägt fehl? AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
Hatsi09 Javafx MediaPlayer spielt nicht immer AWT, Swing, JavaFX & SWT 3
Hatsi09 Javafx Neuladen von ImageView und MediaView AWT, Swing, JavaFX & SWT 3
Maxim6394 JavaFX Umlaute in JavaFX GUI AWT, Swing, JavaFX & SWT 12
Maxim6394 JavaFX Scene Builder - Crash bei eigener Komponente AWT, Swing, JavaFX & SWT 2
Ernesto95 JavaFX JavaFX GUI mit sehr vielen Update requests AWT, Swing, JavaFX & SWT 4
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
J Netbeans die JavaFX-Anwendung wird nicht ausgeführt AWT, Swing, JavaFX & SWT 16
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
JavaSchmecktLecker JavaFX JavaFX Ordner automatisch verlinken AWT, Swing, JavaFX & SWT 2
melaniemueller Taschenrechner JavaFX AWT, Swing, JavaFX & SWT 4
R auto. Importanweisungen für javafx funktioniert in Eclipse nicht mehr AWT, Swing, JavaFX & SWT 4
thor_norsk JavaFX Anwendung stürzt ab AWT, Swing, JavaFX & SWT 4
berserkerdq2 Skalieren sich javafx objekte automatisch auf die Bildschirmgröße AWT, Swing, JavaFX & SWT 6
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
B Java Projekt mit JavaFX und jfoenix ausführbar machen AWT, Swing, JavaFX & SWT 46
H JavaFX wie JavaFX Projekt aufsetzen? AWT, Swing, JavaFX & SWT 10
thor_norsk JavaFX - Grafikkarte AWT, Swing, JavaFX & SWT 7
MiHimbert Rückmeldung an den aufrufenden JAVAFX-Dialog AWT, Swing, JavaFX & SWT 1
MiMa JavaFX Runtime components are Missing??? AWT, Swing, JavaFX & SWT 3
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
B JavaFX Sprachumschaltung mit Button auf der HMI AWT, Swing, JavaFX & SWT 6
H JavaFX Fehlende JavaFX Package AWT, Swing, JavaFX & SWT 10
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
_user_q Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
G JavaFX Line Chart mit Farbverlauf/Gradient in Linie AWT, Swing, JavaFX & SWT 1
thor_norsk JavaFX, FXML und SceneBuilder AWT, Swing, JavaFX & SWT 6
_user_q Über installDist exportiertes Programm wirft "Unsupported JavaFX configuration" AWT, Swing, JavaFX & SWT 0
CodingBerlin JavaFX Programm läuft nur unter Eclipse AWT, Swing, JavaFX & SWT 1
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
temi JavaFX "Frames" in JavaFx - passende Komponente? AWT, Swing, JavaFX & SWT 13
G JavaFX Steuerung bzw. Test von externer JavaFX Anwendung (liegt nur als jar vor) AWT, Swing, JavaFX & SWT 9
_user_q [JavaFX] Spinner so einstellen, dass er nicht leer bleiben darf? AWT, Swing, JavaFX & SWT 6
S Javafx getResource-Pfad wird nicht erkannt AWT, Swing, JavaFX & SWT 7
A JavaFX exportierte Jar ohne beim starten die Libs hinzufügen? AWT, Swing, JavaFX & SWT 2
J JavaFX Schiffe versenken mit JavaFX und Scene builder AWT, Swing, JavaFX & SWT 3
Encera ArrayList mit eigenen Objekten in JavaFX sortieren und ausgeben AWT, Swing, JavaFX & SWT 50
L JavaFx Textformatierung mittels Datenbank und Funktion anpassen AWT, Swing, JavaFX & SWT 5
sserio Wie funktioniert ein Controller bei JavaFx? AWT, Swing, JavaFX & SWT 1
sserio Kann man bei JavaFx ein Fenster aufkommen lassen? AWT, Swing, JavaFX & SWT 1
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
S Ich bringe Code mit JavaFX unter Apache NetBeans IDE 12.6 nicht zum laufen. AWT, Swing, JavaFX & SWT 14
K Bekomme (u.a) javafx.fxml.LoadException trotz "korrektem" Code AWT, Swing, JavaFX & SWT 8
S JavaFX: voneinander abhängige TextFields AWT, Swing, JavaFX & SWT 33
M Gluon will JavaFX in den Browser stecken AWT, Swing, JavaFX & SWT 0
H javafx application does not exist AWT, Swing, JavaFX & SWT 16
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
izoards JavaFX TableView mit Array Inhalt füllen AWT, Swing, JavaFX & SWT 1
M Javafx versuch Bibliothek zu erstellen AWT, Swing, JavaFX & SWT 0
N JavaFX Javafx intelij Projekt zu ausführbaren jar Datei Machen AWT, Swing, JavaFX & SWT 1
K JavaFx, Sound Aufnahme und Thread AWT, Swing, JavaFX & SWT 0
izoards JavaFX TextFlow - Sonderzeichen AWT, Swing, JavaFX & SWT 1
maximstein JavaFX WebView - java.lang.NoSuchMethodError: 'boolean com.sun.prism.ResourceFactory.isDisposed()' AWT, Swing, JavaFX & SWT 4
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
MiHimbert javaFX openfx (17) datepicker AWT, Swing, JavaFX & SWT 3
A Mit JavaFX einzelne Zeilen in TableView farbig markieren AWT, Swing, JavaFX & SWT 5
melaniemueller JavaFX Taschenrechner mit SceneBuilder AWT, Swing, JavaFX & SWT 12
Jose05 Javafx Label Höhe=Breite AWT, Swing, JavaFX & SWT 1
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
izoards JavaFX editierbare Tabelle AWT, Swing, JavaFX & SWT 4
N javafx Position der Bustaben finden label AWT, Swing, JavaFX & SWT 1
D Verschieden Scenen ansprechen mit dem Scene Builder und JavaFX (Eclipse) AWT, Swing, JavaFX & SWT 16
izoards JavaFX Background Task warten auf Knopfdruck AWT, Swing, JavaFX & SWT 4
M Zufallsgenerator bei JavaFx AWT, Swing, JavaFX & SWT 1
N Label Schriftart Ändern javafx AWT, Swing, JavaFX & SWT 2
L JavaFX JavaFX, MVVM und SceneBuilder AWT, Swing, JavaFX & SWT 4
S JavaFx Album AWT, Swing, JavaFX & SWT 137
I JavaFX - Pane wechseln über 2. Controller AWT, Swing, JavaFX & SWT 5
melaniemueller JavaFX Beispiel kann nicht ausgeführt werden AWT, Swing, JavaFX & SWT 4
T FXML Datei in Java Code einbinden: javafx.fxml.LoadException AWT, Swing, JavaFX & SWT 2
J JavaFX - Included FXML - Entfernen feststellen AWT, Swing, JavaFX & SWT 2
J JavaFX JavaFX/ Taskmenu / UML Klassendiagramm AWT, Swing, JavaFX & SWT 2
Davee JavaFX JavaFX Jar ausführbar jedoch nicht alle Stages AWT, Swing, JavaFX & SWT 3
2 JavaFX die ChoiceBox leitet den String nicht weiter oder es komm zu einem NullPointer AWT, Swing, JavaFX & SWT 8
C MouseEvent JavaFX AWT, Swing, JavaFX & SWT 4
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
M4cM4rco0707 JavaFX Custom-Komponente mit Custom-Controller AWT, Swing, JavaFX & SWT 3
M Error occurred during initialization of boot layer java.lang.module.FindException: Module javafx.controls not found AWT, Swing, JavaFX & SWT 14
G javafx build.fxbuild in eclipse und ANT AWT, Swing, JavaFX & SWT 9
M Kollisionensbehandlung mit JavaFX AWT, Swing, JavaFX & SWT 1
N JavaFX - Toolkit not initialized AWT, Swing, JavaFX & SWT 6
G JavaFX , Duplicate erzeugt aber ich weis nicht wo AWT, Swing, JavaFX & SWT 4
K Javafx Plugin (javafx:jlink) mit moditect Plugin nutzen ... AWT, Swing, JavaFX & SWT 5
J Saubere Trennung Model, View, Controller Javafx AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben