Klassen JPanel nach Ablauf der Spielzeit neuladen

CptK

Bekanntes Mitglied
Servus, ich habe das Problem, dass ich eine Methode gerne erst nach dem Ablauf der Spielzeit ausführen würde, dazu müsste ich aber das JPanel reloaden, weiß aber nicht wie.
Java:
public Panel() {
               
        setSize(1000,743);                                                        //Setze die Größe des JPanels
        setLayout(null);                                                        //Setze das Layout des JPanels
        setVisible(true);                                                        //Mache das JPanel sichtbar
        initializeIL();                                                            //Führe die Methode aus, erzeuge Bilder
        repaint();                                                                //Zeichne das JPanel neu                                                       
       
        newGame = new JButton("Neues Spiel");                                    //Erstelle newGame mit Text
        newGame.setFont(new Font("Arial", Font.BOLD, 20));                        //Ändere Schrifdesign
        newGame.addActionListener(new ActionListener() {                        //Fühe newGame einen ActionListner hinzz
            @Override
            public void actionPerformed(ActionEvent arg0) {
                new SetDefault(Main.panel);                                        //Setze das Spiel zurück
                newGame.setVisible(false);                                        //Mache den Button wieder unsichtbar
            }
        });
        newGame.setBounds(400,570,200,50);                                        //Setze Position& Größe
        newGame.setVisible(false);                                                //Setze die Sichtbarkeit
        add(newGame);                                                            //Füge den Button dem Panel hinzu
       
        try { new Stats(); } catch (IOException e) { e.printStackTrace(); }        //Lese die Stats ein
       
        if(ingame == false) {
            sc = new StatsChange(punkte, "");
        }
    }
Es geht um die letzte If-Abfrage. Wie kann ich es machen, dass das Panel neu geladen wird wenn der Timer abgelaufen ist und ingame auf false gestzt wurde?
Hier noch die Timer Klasse:
Java:
package Animations;

import java.awt.Color;
import java.awt.Font;
import java.util.*;
import java.util.Timer;

import javax.swing.*;

import Gui.Panel;

public class GameTimer {
   
    private Panel p;
   
    private Timer timer;
    private static JLabel clock;
   
    public int sekunde;
   
    public GameTimer(Panel panel, int sek) {
        sekunde = sek;
        p = panel;
        clock = new JLabel();
        clock.setBounds(10,10,200,40);
        clock.setFont(new Font("Arial",Font.BOLD,25));
        clock.setVisible(true);
        p.add(clock);       
       
        timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                       
                        if(sekunde >= 60) {
                            int sek = sekunde-60;
                            if(sek < 10) {
                                clock.setText("1:0"+ sek);
                            } else {
                                clock.setText("1:"+ sek);
                            }
                        } else if(sekunde < 60 && sekunde >= 0) {
                            if(sekunde < 10) {
                                clock.setText("0:0"+ sekunde);
                            } else {
                                clock.setText("0:"+ sekunde);
                            }
                        } else if(sekunde == -1) {
                            clock.setForeground(new Color(204,0,0));
                            clock.setText("Zeit abgelaufen");
                            timer.cancel();
                            p.setIngame(false);
                        }
                        sekunde--; 
                       
                        if(sekunde < 4 ) {
                            new Sound("sounds/beep.wav");
                        }
                  
                    }                   
                });
                     
            }
        }, 0, 1000);   
       
    }
    public static void invisibleClock() {
        clock.setVisible(false);
    }

}
Bin für jede Hilfe dankbar! 🙂
 
Ich weiß nicht, warum Du irgendwas neu laden willst. Ich weiß auch nicht, warum ingame im Konstruktor des Panels einmal true und einmal false sein kann. Was ich sehe ist, dass p.setIngame(false) aufgerufen wird. Warum machst Du in Panel nicht einfach eine Methode
Java:
public void finishGame() {
    ingame = false;
    sc = new ...
    ...
    repaint();
}
und rufst diese von Deinem Timer aus auf?
 
Wo wird denn Panel erzeugt?

Mach es doch so:

Java:
else if(sekunde == -1) {
          clock.setForeground(new Color(204,0,0));
          clock.setText("Zeit abgelaufen");
          timer.cancel();
          p.setIngame(false);
          p = new Panel();
}
 

Zurück
Oben