说,你有一个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
}});
//...........
}
}
答案 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。