比如说,您有一个 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/