JavaFX Wie programmiere ich hier einen "Weiter" Button?

bob651

Aktives Mitglied
Habe mit JavaFX gerade so eine Ampel grafisch erzeugt. Ganz normal mit roten, gelbe, grünen Kreisen. Ich will jetzt aber, wenn ich auf den Button "Weiter" klicke, dass sich z.b der rote kreis entfernt und dann der gelbe Kreis erscheint. Habt ihr eine Idee, wie? Mit Eventhandler evtl?
Java:
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class asdas extends Application {
Circle redlight, yellowlight, greenlight;
Button btn_next;


public void start(Stage primaryStage) {
btn_next = new Button("Weiter");
redlight = new Circle(35, Color.RED);
yellowlight = new Circle(35, Color.YELLOW);
greenlight = new Circle(35, Color.DARKGREEN);
btn_next.setLayoutX(-180);
btn_next.setLayoutY(280);


greenlight.setFill(Color.GREY);
VBox lightbox = new VBox(200, redlight, btn_next);
lightbox.setAlignment(Pos.CENTER);


Scene scene = new Scene(lightbox, 200, 300);
primaryStage.setScene(scene);
primaryStage.show();
}




public static void main(String[] args) {
launch(args);
}
}
 
Ich würde mit einer switch Struktur arbeiten
1:grün
2:gelb
3:rot
Bei jedem Klick prüfe ich was es ist: wenn 1 dann grün usw
 
Java:
Circle circle;
Color redlight, greenlight, yellowlight;
Button btn_next;
int index = 1;


public void start(Stage primaryStage) {
    btn_next = new Button("Weiter");
    redlight = Color.RED;
    yellowlight = Color.YELLOW;
    greenlight = Color.DARKGREEN;
    circle = new Circle(35, Color.CYAN);
    btn_next.setLayoutX(-180);
    btn_next.setOnAction(e->{
        switch (index) {
            case 1:
                circle.setFill(redlight);
                System.out.println("red");
                break;
            case 2:
                circle.setFill(greenlight);
                System.out.println("green");
                break;
            case 3:
                circle.setFill(yellowlight);
                System.out.println("yellow");
                break;
            default:
                System.out.println("Error");
        }
        index++;
        if(index == 4) {
            index = 1;
        }
    });
    btn_next.setLayoutY(280);

    VBox lightbox = new VBox(200, circle, btn_next);
    lightbox.setAlignment(Pos.CENTER);


    Scene scene = new Scene(lightbox, 200, 300);
    primaryStage.setScene(scene);
    primaryStage.show();
}
Vielleicht in etwa so?
 
Ein Array erspart ein switch, wenn es um sowas zyklisches geht:
Java:
Circle circle;
Button btn_next;
int index = 0;
public void start(Stage primaryStage) {
    btn_next = new Button("Weiter");
    Color[] colors = {Color.RED,Color.YELLOW,Color.DARKGREEN,Color.YELLOW}
    circle = new Circle(35, Color.CYAN);
    btn_next.setLayoutX(-180);
    btn_next.setOnAction(e-> {
                circle.setFill(colors[index]);
                index = (index+1)%colors.length;
    });
    btn_next.setLayoutY(280);
    VBox lightbox = new VBox(200, circle, btn_next);
    lightbox.setAlignment(Pos.CENTER);
    Scene scene = new Scene(lightbox, 200, 300);
    primaryStage.setScene(scene);
    primaryStage.show();
}

Ich hab das von @Cromewell kopiert und frei bearbeitet, könnte Fehler beinhalten.
 
^Danke Leute, irgendwie verstehe ich mit es mit Switch besser.

Edit: Wir ändern ja lediglich die Farbe des Circles bei den Switch Optionen.
Kann ich bei den Case auch einfach neue Circles hinzufügen, anstatt die Farbe zu ändern?
also case 1: circle1=new Cirle(....);
 
Zuletzt bearbeitet:
naja habs hinbekommen, anstatt einen neuen Circle zu erzeugen habe ich einfach die, die ich weghaben wollte Weiß gemacht.(Noob Taktik^^)
 

Zurück
Oben