通知调用者类发生了一些事情



比方说,您有一个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
          }});
      //...........
    }
}

若要将事件通知mainFrameSidePanel实例(对于Frame来说非常糟糕的名称)必须具有对mainFrame的引用。传递mainFrame作为SidePanel构造函数的参数,并从SidePanel:中的actionPerformed方法回调mainFrame

SidePanel panel = new SidePanel(this);

和侧板:

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

不过,这将两个类紧密地结合在一起。解耦它们的一种方法是使SidePanel对象接受自定义事件的侦听器,并在单击按钮时激发这样的事件。mainFrame将构造SidePanel实例,并将自己(或内部匿名类实例)添加为SidePanel的侦听器。

有关示例,请参见本页。

相关内容

最新更新