听取和回应Panel内的事件?

时间:2013-04-02 07:34:06

标签: java swing

我有一个MainPanel。它包含SubPanel1,SubPanel2等.SubPanel可以有任何组合的JComponents,如按钮,单选按钮,文本框等。一个子面板可能与另一个相同或不同。

如何让MainPanel监听并响应SubPanel内发生的操作?请给我一些很好的例子,注释代码告诉我如何做到这一点。

照片 -

enter image description here

3 个答案:

答案 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中创建动作侦听器,并在子面板中使用相同的动作侦听器。事件源应该让您识别生成事件的子面板。