уведомить вызывающий класс о том, что произошло - PullRequest
2 голосов
/ 22 января 2012

Скажем, у вас есть подкласс JFrame, и вы можете использовать его для создания своего собственного JFrame.В этом классе (назовем его mainFrame) мы создаем ссылку на другой пользовательский класс JFrame (назовем его sidePanel).

В sidePanel у вас естьразличные кнопки, переключатели, ..

У меня вопрос, есть ли способ уведомить mainFrame, что пользователь нажимает на кнопку?

Я создал (непроверенный) примерчто я имею в виду:

class mainFrame extends JFrame {
   public mainFrame() {
      super("main frame");
      //...........
      sidePanel panel = new sidePanel();
      //...........
   }
   public static void main(String[] args) {
      mainFrame mainF = new mainFrame();
      //.........
   }
}

И sidePanel класс:

class sidePanel extends JFrame {

   public sidePanel() {
      super("sidePanel frame");
      //...........
      JButton button1 = new JButton();
      button1.addActionListener(new ActionListener() {  
          public void actionPerformed(ActionEvent e)
            {
               //Notify mainFrame somehow button is pressed
          }});
      //...........
    }
}

1 Ответ

2 голосов
/ 22 января 2012

Чтобы уведомить mainFrame о событии, экземпляр SidePanel (действительно недопустимое имя для фрейма) должен иметь ссылку на mainFrame.Передайте mainFrame в качестве аргумента конструктора SidePanel и обратный вызов mainFrame из метода actionPerformed в SidePanel:

SidePanel panel = new SidePanel(this);

и в SidePanel:

public void actionPerformed(ActionEvent e) {
    mainFrame.buttonHasBeenClicked();
    ...
}

Это теснопары обоих классов, хотя.Чтобы отделить их, нужно заставить объект SidePanel принимать прослушиватели для пользовательских событий и запускать такое событие при нажатии кнопки.MainFrame создаст экземпляр SidePanel и добавит себя (или внутренний экземпляр анонимного класса) в качестве прослушивателя для SidePanel.

См. эту страницу для примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...