2013-05-08 2 views
-2

Теперь я реализую игру в лоток, в которой я использую JButton для представления лотка. Но лоток составляет 7x7, поэтому для реализации прослушивателя действий это не так весело. У меня есть такой код:DRY код для реализации action listenener (JAVA)

public void actionPerformed(ActionEvent ae) 
    { 
     if (ae.getSource() == Bouton11) 
      { 
       this.PosePion(1, 1, Bouton11); 
      } 
      else if (ae.getSource() == Bouton21) 
      { 
       this.PosePion(2, 1, Bouton21); 
      } 
      else if (ae.getSource() == Bouton31) 
      { 
       this.PosePion(3, 1, Bouton31); 
      } 
      ...... 
    } 

Как я могу уменьшить этот код? :/

Спасибо :)

ответ

2

Сделайте свой собственный тип слушателя. Ваш тип должен реализовывать ActionListener (и, следовательно, метод actionPerformed) и быть сконструирован с тремя параметрами: кнопкой и двумя целыми числами. Причина, по которой вам нужны эти три параметра, заключается в том, что вы можете передать их методу PosePion (который, кстати, должен быть капитализирован posePion).

Например:

class PoseActionListener implements ActionListener { 

    private JButton button; 
    private int a, b; 

    public PoseActionListener(JButton btn, int a, int b) { 
     this.button = btn; 
     this.a = a; 
     this.b = b; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     posePion(a, b, btn); 
    } 
} 

Тогда:

button11.addActionListener(new PoseActionListener(button11, 1, 1); 
button12.addActionListener(new PoseActionListener(button12, 1, 2); 

Или, еще лучше, создать все кнопки сразу:

for (int i=1; i<=7; i++) { 
    for (int j=1; j<=7; j++) { 
     JButton btn = new JButton("Button " + i + ", " + j); 
     // store the button in an array if you want 
     btn.addActionListener(new PoseActionListener(btn, i, j); 
    } 
} 
+0

Спасибо, парень, я попробую это =) – user2057209

2

Поместите ваши JButtons в 2D, массив 7x7, когда они созданы.

Затем в методе слушателя проведите цикл по массиву, чтобы определить, какой из JButton был нажат. Ваши индексы цикла помогут вам определить, что нужно передать PosePion.

+0

Я понимаю, что вы имеете в виду, в ноу-хау я могут помещать их в массив, но как вы определяете, какой JButton был нажат с помощью цикла, и как передать его в PosePion, например? – user2057209

1

Я предлагаю вам изучить соглашения о кодировании Sun Java. Твой код трудно прочитать.

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

Я также рекомендую структуру данных и реализацию команд, чтобы сократить бессмысленное повторение.

+0

Мы не узнаем, как это сделать в классе, просто знайте, как реализовать один прослушиватель действий ... Вот почему у меня есть некоторые проблемы для реализации этого – user2057209

+0

Вы * нуждаетесь *, чтобы учиться в классе и использовать * свой * мозг, и не делать простой copypasting. – skuntsel

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