Как запустить новую игру, используя JMenuBar

У меня такая игра с шариками и я пытаюсь создать JMenuBar,

У меня проблема с кнопкой New, Теперь игра запускается сразу же, когда я запускаю свою программу и нажимаю кнопку New игра снова открывается в новом окне. У меня проблема с этим методом: fileNew.addActionListener(new ActionListener(), Этот метод запускает игру снова в новом окне, это не правильно.

Моя цель: при первом запуске программы я вижу пустую таблицу и только после нажатия кнопки New это начинается (появляются шары). Если я нажму кнопку New во время игры снова начинается в том же окне. Как мне этого добиться?

Мой код:

package api;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.FileNotFoundException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.*;
import gui.Render;
import database.SaveGame;

public class Main extends JFrame {

public Main() {

    // ------menu------//
    JMenuBar menubar = new JMenuBar();
    JMenu fileMenu = new JMenu("File");
    fileMenu.setMnemonic(KeyEvent.VK_F);
    JMenuItem fileNew = new JMenuItem("New");
    fileNew.setMnemonic(KeyEvent.VK_N);
    JMenuItem fileSave = new JMenuItem("Save");
    fileNew.setMnemonic(KeyEvent.VK_O);
    JMenuItem fileLoad = new JMenuItem("Load");
    fileSave.setMnemonic(KeyEvent.VK_S);

    JMenuItem fileExit = new JMenuItem("Exit");
    fileExit.setMnemonic(KeyEvent.VK_C);
    fileExit.setToolTipText("Exit application");
    fileExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, ActionEvent.CTRL_MASK));

    JMenu helpMenu = new JMenu("Help");
    JMenuItem about = new JMenuItem("About");

       // website button action
    about.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            launchURL("https://www.kurnik.pl/kulki/zasady.phtml");
        }
    });

    // ---new---//
    fileNew.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent event) {
            String[] value = null;
            Main.main(value);
                }
    });

    // ---exit---//
    fileExit.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent event) {
            System.exit(0);
        }
    });

    fileMenu.add(fileNew); // file
    fileMenu.add(fileLoad); // load
    fileMenu.add(fileSave); // save
    fileMenu.addSeparator(); // ____
    fileMenu.addSeparator(); // ____
    fileMenu.add(fileExit); // exit
    helpMenu.add(about);

    menubar.add(fileMenu);
    menubar.add(helpMenu);

    setJMenuBar(menubar);

    int width = Game.widthSize * Render.SCALE;
    int height = Game.heightSize * Render.SCALE;
    Game game = new Game();
    add(new Render(game, width, height));

    setTitle("Kulki");
    setSize(width + 18, height + 38);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
}

static void launchURL(String s) {
    String s1 = System.getProperty("os.name");
    try {

        if (s1.startsWith("Windows")) {
            Runtime.getRuntime().exec((new StringBuilder()).append("rundll32 url.dll,FileProtocolHandler ").append(s).toString());
        } else {
            String as[] = {"firefox", "opera", "konqueror", "epiphany",
                "mozilla", "netscape"};
            String s2 = null;
            for (int i = 0; i < as.length && s2 == null; i++) {
                if (Runtime.getRuntime().exec(new String[]{"which", as[i]}).waitFor() == 0) {
                    s2 = as[i];
                }
            }

            if (s2 == null) {
                throw new Exception("Could not find web browser");
            }
            Runtime.getRuntime().exec(new String[]{s2, s});
        }
    } catch (Exception exception) {
        System.out.println("An error occured while trying to open the web browser!\n");
    }
}

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            Main ms = new Main();
            ms.setVisible(true);
        }
    });
}
}

0 ответов

Другие вопросы по тегам