Java 监听和响应面板内的事件?

Java 监听和响应面板内的事件?,java,swing,Java,Swing,我有一个主面板。它包含子面板1、子面板2等。子面板可以有按钮、单选按钮、文本框等JC组件的任意组合。一个子面板可能与另一个子面板相同,也可能不同 如何让主面板倾听和响应子面板内发生的操作?请给我看一些带有注释代码的好例子,这些代码教我如何做到这一点 照片- 在主面板中创建动作侦听器,并在子面板中使用相同的侦听器。事件源应允许您识别生成事件的子面板。代码来自: 这就是您通常注册处理程序的方式,对吗 这是什么意思 button.addActionListener(this); 这意味着,每

我有一个主面板。它包含子面板1、子面板2等。子面板可以有按钮、单选按钮、文本框等JC组件的任意组合。一个子面板可能与另一个子面板相同,也可能不同

如何让主面板倾听和响应子面板内发生的操作?请给我看一些带有注释代码的好例子,这些代码教我如何做到这一点

照片-


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

代码来自:

这就是您通常注册处理程序的方式,对吗

这是什么意思

    button.addActionListener(this);
这意味着,每当使用按钮对象执行操作时,调用当前对象的方法(该对象引用)。 因此,如果您传递您的主面板的引用而不是,并且您的主面板有一个方法actionPerformed,并且它实现了ActionListener*,每当按钮触发事件时,您的主窗口的*actionPerformed**将被调用

所以把这一行改成这样:

    button.addActionListener(RefOfMainPanel);

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

你可能正在寻找答案。Java Swing程序可以使用几种方式中的任何一种来实现该模式;列举了一些例子。因为组件可以接受任意数量的侦听器,所以一个重要的启发式方法是查找父组件可以侦听的现有子面板组件。在子面板的特殊情况下,也可以按照建议将事件转发给家长的侦听器。

子面板[]面板
听起来是个不错的开始。然后只需对其进行迭代,并对其应用相同的ActionListener。@Shark-但事件的源(来自getSource())将是子面板的各个组件,而不是子面板。我想知道是哪个面板导致了事件并处理了事件。你真的需要通读一遍。baid的想法是,您要么需要提供自己的侦听器接口,要么允许您的面板充当代理,公开您希望允许人们注册的侦听器(根据我之前的回答)有两种处理事件的方法—让每个组件注册自己的事件处理程序—或者在应用程序中实现
ActionListener
,并使所有组件
registerActionListener(this)
。然后,您将创建一个方法,该方法将捕获被按下/交互的组件,并且您可以在那里做出相应的反应。Crosspost:您还可以为我提供一些好的简单示例代码吗?您可能需要阅读本教程:看起来swing毕竟不是那么简单。也许,我应该为主面板内的所有组件创建一个匿名ActionLister。@davidblaine Swing的主要功能之一是它的灵活性。它不会(经常)限制您使用给定的样式,也不会假设您可能如何使用其组件。但是,它确实需要您投入一些精力来建立一系列库,以满足您的需求和需要-IMHO@MadProgrammer和垃圾神-如果MyClass需要实现JPanel(即一个充满正常按钮的JPanel)和Observable,那么observer模式将失败。如图所示,按钮面板包含在主面板中。按钮面板应由主面板观察。如何解决这个问题?@davidblaine为什么?主面板正在观察子面板?你需要做的决定是什么以及如何做到这一点。主委员会想要回应什么,以及如何做到这一点。如果主面板关心的只是状态更改,那么您可以使用
ChangeListener
。子面板将提供注册
变更监听器
的方法,并根据其状态的某些变化来管理对这些监听器的通知…@MadProgrammer-我不知道我是否正确思考了它。我想创建一个名为ButtonHolder的可重用类,它扩展了JPanel。这将包含一个按钮网格,每个按钮都有一个唯一的值/名称。按钮支架可用于任何设备,如电梯面板、计算器等。这些设备是包含文本字段和按钮支架的面板。他们会找出哪个按钮被按下在按钮座内,然后把按钮的名称放在文本字段中。
    button.addActionListener(RefOfMainPanel);