根据布尔值是等于true还是false来删除/添加JComponents

时间:2013-04-30 17:38:15

标签: java swing timer jbutton actionlistener

在我正在制作的游戏中,我刚创建了一个起始屏幕。该起始屏幕有4 JButton个播放,选项,信用和退出。如果按Play,将出现另一个JButton,New Game。

我不想这样做,以便当你按下新游戏按钮时,开始画面消失并且游戏开始(实际游戏和盯着屏幕延伸JComponent)。

我有一个单独的课程来运行游戏并且在游戏中选项菜单。

在起始屏幕类中,我有一个名为startGame的boolean,默认情况下该布尔值等于false,当您按下New Game按钮时,它将等于true。在开始菜单类中,我还有一个返回startGame值的公共方法,它看起来像这样。

public boolean checkGame(){
    return startGame;
}

在运行游戏的主类中,我使用这样的计时器检查checkGame方法是否等于true或false。

if(menu.checkGame() == false){
            frame.add(menu);
        }
        Timer timer = new Timer(5, new ActionListener(){
            public void actionPerformed(ActionEvent e){
                if(menu.checkGame() == true){
                    frame.remove(menu);
                    frame.add(new Level1());
                }
            }
        });
        timer.start();

显然这不起作用,因为如果它我不会问这个问题。那么现在我的问题是,我将如何让它像我想要的那样工作?

1 个答案:

答案 0 :(得分:0)

在您的第二个代码段中,Timer仅运行一次任务。也许您希望ScheduledExecutorService重复检查,例如:

    final ScheduledExecutorService scheduledExecutor =
            Executors.newSingleThreadScheduledExecutor();

    scheduledExecutor.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    if (menu.checkGame()) {
                        frame.remove(menu);
                        frame.add(new Level1());
                        scheduledExecutor.shutdown();
                    }
                }
            });
        }
    }, 5, 5, TimeUnit.MILLISECONDS);