更改Panel时,监听器不起作用

时间:2014-08-12 14:47:14

标签: java multithreading actionlistener

我的程序出了问题。我正在为考试开发Pacman,但是当我将Panel从“菜单”更改为“游戏”面板时,我遇到了麻烦。 正好在主框架中我添加了两个面板:“菜单”面板和“游戏”面板。如果我不添加菜单面板,游戏(最重要的是,听众)可以正常工作;但如果我也添加菜单面板,当我按下“开始游戏”按钮时,菜单的“setVisible”属性将设置为false,新线程将启动。在这种情况下,问题是监听器不起作用。

public static void main(String[] args) {

    boolean gameOver = false;

    MainFrame mf = new MainFrame(FRAME_WIDTH, FRAME_HEIGHT, TITLE);

    // board is a logic map; gb is the graphic map of the game
    Board board = new Board();
    GraphicBoard gb = new GraphicBoard(mf, board);
    gb.setLocation(150, 0);


    Background background = new Background(mf.getWidth(), mf.getHeight(), BACKGROUND_COLOR);
    background.add(gb);


    PacmanThread thread = new PacmanThread(gb, gameOver);

    Menu menu = new Menu(mf.getWidth(), mf.getHeight(), thread);

    mf.add(menu);
    mf.add(background);

    mf.setResizable(false);
    mf.setVisible(true);
}

在menu.java中有一个子类,所以

public class Menu extends JPanel{
public Menu(int pWidth, int pHeight, PacmanThread pThread) {
    this.setLayout(null);
    this.setSize(pWidth, pHeight);

    this.thread = pThread;

    initComponent();
}


    private class StartGame implements ActionListener {

        private Menu menu;

       public StartGame(Menu pMenu) {
           this.menu = pMenu;
        }

        @Override
        public void actionPerformed(ActionEvent e) { //<--- is the problem here? what I should add?
           menu.setVisible(false);
           thread.start();         
        }

    }

}

最后,actionListener存在于名为Pacman.java的类

0 个答案:

没有答案