Probleme JavaFX Fenster aus Fenster heraus öffnen

Maja11

Grünschnabel
Hallo Zusammen,

Ich hänge gerade an einer Aufgabe fest und bitte euch um eure Hilfe. Ich möchte ein Zählspiel, das von der oberen Ecke des Bildschirms zur unteren Ecke läuft, aus einen Fenster heraus öffnen und wenn es unten angekommen ist, soll sich ein Fenster öffnen, dass nach der Anzahl der roten Quadrate fragt.

Fenster 1 mit dem Startbutton und einer Combobox zur Geschwindigskeitswahl soll beim anklicken des Startbuttons geschlossen werden. Dann öffnet sich das Spiel und nach dessen Durchlauf (Diagonal von oben nach unten) mit anschließender Neubelegung der Farben, öffnet sich das Fenster mit der Frage, wieviele rote Quadrate zu sehen waren.

Bei mir öffnen sich allerdings alle Fenster gleichzeitig, in Fenster 1 kann ich meine Combobox mit der Auswahl nicht anklicken und das zweite Fenster möchte sich nicht bewegen. Ich wäre euch für eure Hilfe sehr dankbar.

Java:
import javax.swing.JOptionPane;


import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.geometry.Rectangle2D;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.stage.Screen;
import javafx.stage.Stage;

public class Aufgabe1 extends Application{
   static String sec;
   int number;
   Integer i;
       
   final private int random1() {
       return (int)(Math.random()*4);
   }
   
   final private int random2() {
       return (int)(Math.random()*256);
   }
   
   public static void main (String args[]) {
       launch(args);
       sec = args[0];
   }

   @Override
   public void start(Stage st) throws Exception {
       HBox hb = new HBox();
       hb.setAlignment(Pos.CENTER);
       hb.setSpacing(10);
       hb.setPadding(new Insets(5,5,5,5));
       Button button = new Button("Start");
       hb.getChildren().addAll(button);
   
       //Erstes Fenster
   
       Scene szene1 = new Scene(hb);
       st.setTitle("Startfenster");
       st.setScene(szene1);
       st.setWidth(300);
       st.setHeight(150);
       st.show();
       //css Stylesheet einbinden
       szene1.getStylesheets().add((getClass().getResource("styles.css")).toExternalForm());
       
       
       //Combobox zur Geschwindigkeitsauswahl
       VBox vb3 = new VBox();
       ComboBox<String> cb = new ComboBox<String>();
       cb.getItems().add("1.0");
       cb.getItems().add("1.5");
       cb.getItems().add("2.0");
       cb.getItems().add("2.5");
       cb.getItems().add("3.0");
       cb.getItems().add("3.5");
       cb.getItems().add("4.0");
       cb.getItems().add("4.5");
       cb.getItems().add("5.0");       
       cb.setValue("1.0");
       cb.setMaxSize(60, 60);
       String s = cb.getSelectionModel().getSelectedItem().toString();
       hb.getChildren().addAll(cb,vb3);

//-----------------------------------------------------------------------------------------------
       //Zählspiel und Fragefenster
       
       Stage st2 = new Stage();
       int breit = 290;
       int hoch = 290;
       int number = 0;
       Color c = null;
       Group gr = new Group();
       
       for(int x = 0; x <= breit; x += 40)
           for(int y = 0; y <= hoch; y += 40){
           int ra = random1();
           if(ra == 0) {
               c = Color.RED;
               number += 1;
           }else if(ra == 1) {
               c = Color.BLUE;
           }else if(ra == 2) {
               c = Color.GREEN;
           }else if(ra == 3) {
               c = Color.YELLOW;
           }
           
           Rectangle re = new Rectangle(x, y, 30, 30);
           re.setFill(c);
           
           Circle k = new Circle(x+15, y+15, 13);
           int r = random2(), g = random2(), b = random2();
           c = Color.rgb(r, g, b);
           k.setFill(new Color(0,0,0,0));
           k.setStroke(c);
           k.setStrokeWidth(3);
           
           gr.getChildren().add(re);
           gr.getChildren().add(k);
       }
       
       StackPane wurzel = new StackPane();
       wurzel.getChildren().addAll(gr);
       
       Scene szene = new Scene(wurzel, breit, hoch);
       
       st2.setTitle("Spiel");
       st2.setScene(szene);
       st2.setX(0);
       st2.setY(0);
       //st2.show();
       i = new Integer(number);
       
       Rectangle2D d = Screen.getPrimary().getBounds();
       double step = 100*Double.parseDouble(sec);
       
       for(double i=0, j=0; i<(d.getWidth()-st.getWidth());
               i=i+((d.getWidth()-st.getWidth()/step)),
                       j=j+((d.getHeight()-30-st.getHeight()/step)))
       {
           try{
               Thread.sleep(10);
           }catch(InterruptedException e1) {}
           
           st.setX((int)i);
           st.setY((int)j);       
           
       }
       
       
       button.setOnAction((javafx.event.ActionEvent e2) ->{
           st.close();
           st2.show();
       });
       
       cb.setOnAction((javafx.event.ActionEvent e3) ->{
           
       });
   
   }
   
   @Override
   public void stop() {
       number = i.intValue();
       String eingabe = JOptionPane.showInputDialog("Wieviele rote Quadrate waren im Feld?");
       int zahl = Integer.parseInt(eingabe);
       
       if(zahl == number) {
           JOptionPane.showMessageDialog(null, "Richtig.", "Ergebnis", JOptionPane.INFORMATION_MESSAGE);
       }else {
           JOptionPane.showMessageDialog(null, "Falsch.", "Es waren "+ number +".",JOptionPane.WARNING_MESSAGE);
       }
   }

}
 

Neue Beiträge

Zurück