3

我有一个主面板。它包含 SubPanel1、SubPanel2 等。SubPanel 可以具有 JComponent 的任意组合,如按钮、单选按钮、文本框等。一个 SubPanel 可能与另一个相同,也可能不同。

如何让 MainPanel 监听并响应 SubPanels 内发生的操作?请给我看一些带有注释代码的好例子,它教我如何做到这一点。

照片 -

在此处输入图像描述

4

3 回答 3

4

您可能正在寻找观察者模式。Java Swing 程序可以使用几种方法中的任何一种来实现该模式;这里引用了一些例子。因为组件可以接受任意数量的侦听器,所以一个重要的启发式方法是寻找父级可以侦听的现有子面板组件。在子面板的特定情况下,也可以将事件转发给父级的侦听器,如此处所建议

于 2013-04-02T08:34:01.767 回答
1

代码收集自Oracle JavaSE 教程

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);

这意味着,只要该按钮对象发生操作,就调用当前对象的(this指)* actionPerformed方法。因此,如果您传递MainPanel的引用而不是this并且您的主面板有一个方法actionPerformed并且它实现了ActionListener *,那么每当按钮触发一个事件时,您的 Mainwindows 的 * actionPerformed ** 就会被调用。

所以改变了这一行:

    button.addActionListener(RefOfMainPanel);

就这样。是的,就这么简单:)

于 2013-04-02T07:51:44.123 回答
0

在 MainPanel 中创建您的动作侦听器并在子面板中使用相同的侦听器。事件源应让您识别生成事件的子面板。

于 2013-04-02T07:35:31.733 回答