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

标签 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
          }});
      //...........
    }
}

最佳答案

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

SidePanel panel = new SidePanel(this);

在 SidePanel 中:

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

虽然这两个类紧密耦合。解耦它们的一种方法是让 SidePanel 对象接受自定义事件的监听器,并在单击按钮时触发此类事件。 mainFrame 将构造 SidePanel 实例,并将其自身(或内部匿名类实例)添加为 sidePanel 的监听器。

参见 this page举个例子。

关于java - 通知调用者类发生了一些事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8960319/

相关文章:

java - jsp页面只显示字符串中的一个单词

java - 前端或后端的 api 错误消息的国际化?

java - JEdi​​torPane html 文档内联(嵌入)文件中的图像

java - 如何让嵌入式Jpanel走向WEST

Java - Swing - JTable - 为选定行设置颜色,但不为单元格设置颜色

Java:如何在 JFrame 中绘制矩形?

java - 实例化可以是具体类或接口(interface)类的 Java 类

java - Java中的一种负载平衡线程池

java - Hibernate ManyToOne 使用外键连接到非主键目标列

java - 让 ENTER 像使用 JTextField 一样使用 JSpinner