Update GUI (Swing)

Heinzi1991

Erfahrenes Mitglied
Hallo,

ich muss ein Programm für die Uni in Java schreiben und bei mir funktioniert die Aktualisierung der GUI nicht.

Also kurze Erklärung meines Programms:

Ich habe ein kleines Fenster in dem ich alle Einstellungen machen kann, und dort ist ein Button mit dem das Spiel automatisch gestartet wird.

Java:
PlayGround playfield = new PlayGround(infoGameStates);
setVisible(false);
playfield.playTheGame();

In der Klasse Playground ist nun mein Spielfeld und auch meine Spiellogik.
Das Spielfeld besteht aus mehreren Panels und aus mehreren Labels.

Der Code für die playTheGame schaut so aus:
Java:
public void playTheGame() {

        while (true) {

            HashMap<Integer, Integer> nimberAtStack = new HashMap<>();
            int positionNimber = 0;

            nimberAtStack = lookAtNimber();

            positionNimber = calculateXORSum(nimberAtStack);

            updateGUI();

            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            if (positionNimber > 0) {

                calculateNimberPostition(positionNimber, nimberAtStack);

            } else {

                if (makeNotWinMove() != 0) {

                    JOptionPane.showMessageDialog(rootPanel, "Player " + gameStates.getFirstPlayer() + " lose");
                    break;
                }
            }
        }
    }

Die Logik des Spiel funktioniert einwandfrei, aber sobald ich den Button beim ersten Fenster klicke, erscheint einfach nur ein leeres Fenster und sobald die while beendet wurde, erscheint die ganze GUI vom Fenster.
Kleine Info: hab die GUI mit IntelliJ GUI Builder gemacht.

Leider hab ich keine Ahnung was ich falsch mache, kommentiere ich die "playField.playTheGame()" aus, sehe ich die GUI vom Fenster, aber dann funktioniert die Logik nicht mehr!
 

vfl_freak

Premium-User
Moin,

auf gut Deutsch: die GUI wird erst NACH "playField.playTheGame()" aufgerufen ??
Dann ruf' dir GUI halt vorher auf :rolleyes:

Gruß Klaus
 

Heinzi1991

Erfahrenes Mitglied
naja ich ruf den Konstruktor auf und hier wird die GUI aufgerufen:

Java:
public PlayGround(GameStates playGameStates) {

        super("Let's Play");

        gameStates = playGameStates;

        add(rootPanel);

        setSize(1280, 720);

        setVisible(true);
    }

und dann wird das andere Fenster "geschlossen", und dann wird erst die playTheGame() Funktion aufgerufen!
 

Heinzi1991

Erfahrenes Mitglied
hab jetzt geschaut, das "setVisible" passt für das richtige Fenster.

Während der Berechnung "siehe berechnung.png" Fenster erscheint, aber keine Panels sind zu sehen.

Nach der Berechnung erscheint alles so wie es sein soll, "siehe nach_berechnung.png"
 

Anhänge

  • berechnung.png
    berechnung.png
    315,4 KB · Aufrufe: 10
  • nach_berechnung.png
    nach_berechnung.png
    429,4 KB · Aufrufe: 10

Neue Beiträge