java - 如何使用 JMenuItem 重置 JFrame(重启游戏)?

标签 java swing jpanel reset minesweeper

我正在做一个扫雷游戏,随时使用actionPerformed方法(我知道怎么用),我想重置游戏,制作一个全新的JFrame游戏并关闭旧游戏。 ( map 由另一个类的对象在 JuegoBuca() 中生成)。游戏已经运行。我还知道如何使用 JMenuJMenuBarJMenuItem

我的“主类”的代码,一切都在这里发生。

public class JuegoBuca extends JFrame implements MouseListener, ActionListener {

    private JPanel buca, norte;
    private Botones[][] botones;
    private Datos[][] datos;
    private Mapa panel;
    private int numerominas, banderas, minasdescubiertas, clicks, caso;
    private JMenuBar barraMenu;
    private JMenu juego;
    private JMenuItem nuevo, opciones, salir;
    private ImageIcon bandera, bombStar, bombCross, bombHelp, bomb;
    private boolean estado, juegonuevo;

    private JuegoBuca() {

        setVisible(true);
        setSize(250, 250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("Buscaminas");
        setResizable(false);
        //Partes del juego
        panel = new Mapa();
        botones = new Botones[5][5];
        datos = new Datos[5][5];
        buca = new JPanel(new GridLayout(5, 5));
        norte = new JPanel();
        //Variables de información
        banderas = clicks = caso = 0;
        int n = panel.getNumerominas();
        numerominas = n;
        minasdescubiertas = 0;
        estado = juegonuevo =  false;
        //Barra menu y opciones menu
        barraMenu = new JMenuBar();
        juego = new JMenu("Juego");
        //////////////// Jerarquía
        salir = new JMenuItem("Salir");
        salir.addActionListener(this);
        nuevo = new JMenuItem("Nuevo");
        nuevo.addActionListener(this);
        opciones = new JMenuItem("Opciones");
        opciones.addActionListener(this);
        //////////////////////////////////Imagenes
        bandera = new ImageIcon(getClass().getResource("bandera.png"));
        bombStar = new ImageIcon(getClass().getResource("bomb_star.png"));
        bombCross = new ImageIcon(getClass().getResource("bomb_cross.png"));
        bombHelp = new ImageIcon(getClass().getResource("bomb_help.png"));
        bomb = new ImageIcon(getClass().getResource("bomb.png"));

        barraMenu.add(juego);
        juego.add(nuevo);
        juego.add(opciones);
        juego.addSeparator();
        juego.add(salir);
        setJMenuBar(barraMenu);

        norte.add(new JLabel("Clicks " + clicks + "      Minas:  " + numerominas));
        int index = 1;
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                buca.add(botones[i][j] = new Botones());
                botones[i][j].addMouseListener(this);
                botones[i][j].setIndice1(index);
                botones[i][j].setIcon(null);
                datos[i][j] = new Datos();
                if (panel.obtenerValorPanel(i, j) == 0) {
                    datos[i][j].ponerLabel(" ");
                } else if (panel.obtenerValorPanel(i, j) == 64) {

                    datos[i][j].setIcon(bombStar);

                } else {
                    datos[i][j].ponerLabel(Integer.toString(panel.obtenerValorPanel(i, j)));
                }


                index++;
            }
        }

        add(buca, BorderLayout.CENTER);
        add(norte, BorderLayout.NORTH);

        actualizar();
    }

    public static void main(String args[]) {

        JuegoBuca juego = new JuegoBuca();
    }

    private void actualizar() {...}

    @Override
    public void mouseClicked(MouseEvent e) {...}

    @Override
    public void mousePressed(MouseEvent e) {...}

    @Override
    public void actionPerformed(ActionEvent e) {
         Object o = e.getSource();
         if (o == salir) {
            System.exit(0);
        } else if(o == nuevo) {

            //RESET GAME...
        }
    }

    @Override
    public void mouseReleased(MouseEvent e) {...}

    @Override
    public void mouseEntered(MouseEvent e) {...}

    @Override
    public void mouseExited(MouseEvent e) {...}

    public void indicadores(Object o) {...}

    public void logicaJuego(Object o) {...}

    public void dibuja() {...}

    public int minasdesc() {...}

    public boolean Jugar() {...}


}

如果有人需要更多信息或其他信息,请告诉我。 谢谢。

最佳答案

尝试下一步:

JuegoBuca.this.setVisible(false);
JuegoBuca.this.dispose();
new JuegoBuca();

在你的:

if(o == nuevo) {
    //RESET GAME...
}

但我建议您清除所有资源并重用现有框架。

关于java - 如何使用 JMenuItem 重置 JFrame(重启游戏)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20284690/

相关文章:

java - 如何在 JtextArea 中为选定文本添加下划线

java - 调整 JPanel 的大小以准备打印,而无需将其从原始位置移开

Java - 按下按钮时交换多个 JFrame

java - 类未找到异常

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - Spring 启动+ webflux : context lost when running some steps in parallel

框架上具有多个面板的 Java Swing 可滚动 JPanel

java - 我如何获取 Hashmap 的第二个对象

java - 在 JPanel 中创建可见网格

java - 如何从mysql获取数据到jList?