通知调用者类已发生的事情

时间:2012-01-22 10:02:38

标签: java swing

说,你有一个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 个答案:

答案 0 :(得分:2)

要通知mainFrame某个事件,SidePanel实例(帧的名称确实错误)必须引用mainFrame。将mainFrame作为SidePanel构造函数的参数传递,并从SidePanel中的mainFrame方法调用actionPerformed

SidePanel panel = new SidePanel(this);

并在SidePanel中:

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

尽管如此,这两个班级紧密相连。解耦它们的一种方法是使SidePanel对象接受自定义事件的侦听器,并在单击按钮时触发此类事件。 mainFrame将构造SidePanel实例,并将自身(或内部匿名类实例)添加为sidePanel的侦听器。

有关示例,请参阅this page