Вопрос

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

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

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

Это было полезно?

Решение

Сделайте так, чтобы ваш контроллер («основной» класс) реализовал интерфейс 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
   }
  }
 }

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top