Java Simple ActionListener Вопросы - PullRequest
       5

Java Simple ActionListener Вопросы

2 голосов
/ 09 марта 2010

У меня есть основной класс в программе, которая запускает другой класс, который обрабатывает все вещи GUI. В графическом интерфейсе у меня есть кнопка, к которой мне нужно прикрепить ActionListener.

Единственная проблема в том, что исполняемый код должен находиться в основном классе.

Как я могу заставить метод ActionPerformed () выполняться в основном классе при нажатии кнопки в другом месте?

Ответы [ 3 ]

2 голосов
/ 09 марта 2010

Заставьте ваш контроллер («главный» класс) реализовать интерфейс ActionListener, а затем передайте ссылку на класс представления:

public class View extends JFrame {
  public View(final ActionListener listener) {
   JButton button = new JButton("click me");
   button.addActionListener(listener);
   button.setActionCommand("do_stuff");

   getContentPane().add(button);

   pack();
   setVisible(true);
  }
 }

 public class Control implements ActionListener {

  public Control() {
   new View(this);
  }

  @Override
  public void actionPerformed(ActionEvent e) {
   if (e.getActionCommand().equals("do_stuff")) {
    // respond to button click
   }
  }
 }

Это также можно сделать с помощью Действия , но это более полезно, если вы хотите, чтобы один фрагмент кода реагировал на множество кнопок.

2 голосов
/ 09 марта 2010

Реализуйте анонимный внутренний класс как ActionListener на кнопке, а затем вызовите метод вашего основного класса. Это создает меньше зависимостей и позволяет избежать программирования в стиле тегов и переключателей, которое реализуется с помощью интерфейса ActionListener в главном классе.

В любом случае это создаст цикл в вашем графике зависимостей: основной класс будет знать о кнопке, и кнопка должна будет вызвать основной класс. Это не может быть хорошей идеей, так как это затруднит сочинение вещей любым другим способом. Но без дополнительной информации трудно судить о ситуации или рекомендовать что-то конкретное.

0 голосов
/ 09 марта 2010

Реализуйте ActionListener в своем основном классе и добавьте экземпляр основного класса в качестве прослушивателя на кнопку GUI.

...