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

时间:2013-11-29 11:26:49

标签: java swing jpanel reset minesweeper

我正在制作扫雷,使用actionPerformed方法(我知道如何使用它),我想重置游戏,制作一个全新的游戏JFrame并关闭游戏旧的。 (地图在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() {...}


}

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

2 个答案:

答案 0 :(得分:3)

尝试下一步:

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

在你的:

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

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

答案 1 :(得分:2)

调用dispose()方法,然后再次调用main()方法。如果要在单击任何按钮时执行此操作,请在actionPerformed()

中执行此操作