2013-04-30 3 views
0

В игре, которую я сейчас делаю, я только что создал начальный экран. В этом стартовом экране есть 4 JButton s Play, Options, Credit и Quit. Если вы нажмете «Воспроизвести», появится JButton, «Новая игра».Удаление/добавление JComponents в зависимости от того, имеет ли значение boolean значение true или false

Я не сделаю так, чтобы при нажатии кнопки «Новая игра» начальный экран исчезает и начинается игра (как игра с акцентом, так и смотрящий экран продолжается JComponent).

У меня есть отдельный класс, который запускает игру и передает меню опций в игре.

В стартовом классе экрана у меня есть boolean, называемый startGame, который по умолчанию равен логическому значению false, а при нажатии кнопки «Новая игра» он будет равен true. В стартовом классе класса у меня также есть открытый метод, который возвращает значение startGame, он выглядит так.

public boolean checkGame(){ 
    return startGame; 
} 

В главном классе, который запускает игру, я проверить, если метод checkGame равен истинным или ложным, используя таймер, как это.

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(); 

Очевидно, что это не сработает, потому что если бы я не стал задавать этот вопрос. Итак, теперь, на мой вопрос, как я могу заставить его работать, как я хочу?

+0

Почему не все компоненты, работающие, но иметь их видимость скрыты до востребования. – Tdorno

+0

'ActionListener', который у вас есть в' Timer', почему бы не сделать это 'ActionListener' кнопки startGame? – kuporific

+0

@ kuporific, потому что это будет более удобно позже, если я сделаю это таким образом – 2013-04-30 17:45:03

ответ

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); 
Смежные вопросы