如何制作java游戏选项?

时间:2015-04-16 19:01:06

标签: java

我尝试使用START按钮,CONTROLS按钮和HELP按钮创建主菜单。 我为它做了一个篮板,但我需要帮助来制作选项。 我尝试制作它,但错误说局部变量gameFrame是从内部类中访问的;需要被宣布为最终

import java.util.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

import static java.lang.System.*;

public class GameFrame {
    public static void main(String[] args) {
        JFrame gameFrame = new JFrame("PoopMan");
        gameFrame.setSize(900, 800);
        gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gameFrame.setResizable(false);
        gameFrame.setVisible(true);
        gameFrame.getContentPane().setBackground(Color.yellow);
        JPanel panel = new JPanel();
        JButton button1 = new JButton();
        gameFrame.add(panel);
        panel.add(button1);
        gameFrame.setVisible(true);
        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                JOptionPane.showMessageDialog(gameFrame.getComponent(0), "START");
            }
        });
    }
}

2 个答案:

答案 0 :(得分:0)

这很简单。请注意,这是一个查询有关您的代码的问题的地方,而不是寻找答案的地方。

你应该研究的是JMenuBar(参考This Tutorial for Assitance)

看到你是新人,我会帮助你一次。以下是完成您要求的代码。 (尝试和测试)


import java.util.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

import static java.lang.System.*;

public class GameFrame
{
    static private JMenuBar menuBar;
    static private JMenu startMenu, controlsMenu, helpMenu;
    static private JMenuItem startBtn;
    static private JMenuItem controls;
    static private JMenuItem hlpBtn;

    public static void main(String[] args)
    {
        JFrame gameFrame = new JFrame("PoopMan");

        gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        gameFrame.getContentPane().setBackground(Color.yellow);

        menuBar = new JMenuBar();
        startMenu = new JMenu("File");
        controlsMenu = new JMenu("Controls");
        helpMenu = new JMenu("Help");

        startBtn = new JMenuItem("Start");
        controls = new JMenuItem("Controls");
        hlpBtn = new JMenuItem("Help");

        gameFrame.add(menuBar, BorderLayout.PAGE_START);
        menuBar.add(startMenu);
        menuBar.add(controlsMenu);
        menuBar.add(helpMenu);

        startMenu.add(startBtn);
        controlsMenu.add(controls);
        helpMenu.add(hlpBtn);

        gameFrame.pack();
        gameFrame.setResizable(false);
        gameFrame.setVisible(true);
        gameFrame.setSize(900,800);
    }
}

我不确定您收到最终错误的原因。它工作正常。

从后期编辑到问题:

        JButton button1 = new JButton("Button");
        JPanel panel = new JPanel();
        panel.setBackground(Color.yellow);
        gameFrame.add(panel);
        panel.add(button1);

        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                JOptionPane.showMessageDialog(gameFrame.getComponent(0), "START");
            }
        });

Updated Proof

Proof

答案 1 :(得分:0)

我相信您希望在非静态环境中初始化您的游戏。执行以下操作。

public class Main {
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new GameFrame();
            }
        });
    }
}

import java.util.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

import static java.lang.System.*;

public class GameFrame extends JFrame {
    private void init() {
        this.setSize(900, 800);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setResizable(false);
        this.setVisible(true);
        this.getContentPane().setBackground(Color.yellow);
        JPanel panel = new JPanel();
        JButton button1 = new JButton("START");
        this.add(panel);
        panel.add(button1);
        this.setLayout(new FlowLayout());
        this.setMinimumSize(new Dimension(300, 300));
        this.pack();
        this.setVisible(true);
        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                JOptionPane.showMessageDialog(getComponent(0), "START");
            }
        });
    }

    public GameFrame() {
        super("PoopMan");
        init();
    }
}

这样,您可以在另一个线程上启动GameFrame,并且可以在GameFrame类中继续工作。