我有一个MainPanel。它包含SubPanel1,SubPanel2等.SubPanel可以有任何组合的JComponents,如按钮,单选按钮,文本框等。一个子面板可能与另一个相同或不同。
如何让MainPanel监听并响应SubPanel内发生的操作?请给我一些很好的例子,注释代码告诉我如何做到这一点。
照片 -
答案 0 :(得分:4)
您可能正在寻找observer pattern。 Java Swing程序可以使用几种方法中的任何一种来实现该模式;引用了一些例子here。因为组件可以接受任意数量的侦听器,所以一个重要的启发式方法是查找父级可以侦听的现有子组件组件。在子面板的特定情况下,也可以按照建议here 将事件转发给父母的听众。
答案 1 :(得分:1)
代码是从Oracle JavaSE Tutorial收集的:
public class Beeper ... implements ActionListener {
...
//where initialization occurs:
//notice this line
button.addActionListener(this);
...
public void actionPerformed(ActionEvent e) {
...//Make a beep sound...
}
}
这就是你通常如何正确注册处理程序???
这个 在这里意味着什么?
button.addActionListener(this);
这意味着,每当动作发生时,调用当前对象( 此 引用) * actionPerformed 方法那个 按钮 对象。 因此,如果您传递 MainPanel 的参考而不是 此 ,并且您的主面板有一个方法 actionPerformed ,它会实现 ActionListener * ,只要按钮触发 事件,您的Mainwindows's actionPerformed **将被调用。
因此改变了这一行:
button.addActionListener(RefOfMainPanel);
这就是全部。是的,就这么简单:)
答案 2 :(得分:0)
在MainPanel中创建动作侦听器,并在子面板中使用相同的动作侦听器。事件源应该让您识别生成事件的子面板。