2013-10-26 3 views
0

Я хотел бы иметь несколько ActionListener в своем классе. Я делаю простую игру для проекта, который имеет 3 разных уровня и определенное количество кнопок на каждом уровне.Несколько ActionListeners в одном классе

После каждого уровня добавляется новый элемент или компонент. У моего первого уровня есть 25 кнопок, которые при нажатии будут испускать случайный результат, который добавляет к вашему счету. Все эти кнопки делают то же самое, поэтому я решил использовать ActionListener вместо того, чтобы писать 10 if операторов за кнопку. Проблема в том, что я хочу сделать это со своим вторым уровнем, но у класса уже есть определенное действие.

Есть ли какой-либо способ иметь более одного ActionListener в том же классе?

Вот мой ActionPerformed метод:

public void actionPerformed(ActionEvent e) { 
    JButton source = (JButton)e.getSource(); 

     Random RG = new Random(); 
     level_1_random_block = (RG.nextInt(6)); 

     frame2.setVisible(false); 
     if (level_1_random_block == 0){ 
      source.setIcon(new ImageIcon("C:\\Users\\Liam\\Desktop\\BOMB GAME\\oreDiamond.png")); 
      score += 100; 
      initialize_score(); 
     } 
     if (level_1_random_block == 1){ 
      source.setIcon(new ImageIcon("C:\\Users\\Liam\\Desktop\\BOMB GAME\\oreGold.png")); 
      score += 25; 
      initialize_score(); 
     } 
     if (level_1_random_block == 2){ 
      source.setIcon(new ImageIcon("C:\\Users\\Liam\\Desktop\\BOMB GAME\\oreGold.png")); 
      score += 25; 
      initialize_score(); 
     } 
     if (level_1_random_block == 3){ 
      source.setIcon(new ImageIcon("C:\\Users\\Liam\\Desktop\\BOMB GAME\\oreIron.png")); 
      score += 5; 
      initialize_score(); 
     } 
     if (level_1_random_block == 4){ 
      source.setIcon(new ImageIcon("C:\\Users\\Liam\\Desktop\\BOMB GAME\\oreIron.png")); 
      score += 5; 
      initialize_score(); 
     } 
     if (level_1_random_block == 5){ 
      source.setIcon(new ImageIcon("C:\\Users\\Liam\\Desktop\\BOMB GAME\\creeper.png")); 
      score -= 30; 
      initialize_score(); 

      try { 
       Clip clip = AudioSystem.getClip(); 
       clip.open(AudioSystem.getAudioInputStream(new File("C:\\Users\\Liam\\Desktop\\BOMB GAME\\creeper_sound.wav"))); 
       clip.start(); 
      } 
      catch (Exception exc){ 

      } 

     } 
     if (level_1_random_block == 6){ 
      source.setIcon(new ImageIcon("C:\\Users\\Liam\\Desktop\\BOMB GAME\\creeper.png")); 
      score -= 30; 
      initialize_score(); 
     } 

     source.removeActionListener((ActionListener) this); 
     level_1_move_on = true; 
     continue_game(); 

} 
public void EventHandler(int level_1_random_block) { 
    this.level_1_random_block = level_1_random_block;  
} 
+2

Может быть, вы хотите использовать [Стратегия Design Pattern] (http://en.wikipedia.org/wiki/Strategy_design_pattern), чтобы тот ActionListener имеет разные действия в зависимости от состояния программы. –

ответ

1

Вы можете сделать внутренний класс:

button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ */Code goes here*/ } }) (сохранить ActionListener в переменной и установить его для многих кнопок)

ли это несколько раз для разных кнопок, и у вас есть multipleActionListeners.

Вы также можете установить команды действий. button.setActionCommad("lvl1");

В вашей actionPerformed(ActionEvent e) вы можете проверить, если: if(e.getActionCommand.equals("lvl1")) { /*code*/ }

+0

Что вы имеете в виду с разрешением? getActionCommand возвращает набор String для компонента before с помощью setActionCommand. – Geosearchef

Смежные вопросы