从 JButton 中删除一个 ActionListener
Posted
技术标签:
【中文标题】从 JButton 中删除一个 ActionListener【英文标题】:Remove an ActionListener from JButton 【发布时间】:2021-02-08 01:24:27 【问题描述】:我想从JButton
中删除动作监听器。但我有一个像这样的ActionListener
:
btn.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
btn.removeActionListener();
);
但是btn.removeActionListener();
需要括号内的参数,所以我有点难过。
【问题讨论】:
btn.removeActionListener(this);
以便在动作侦听器中将其删除。
那行不通
“我想从JButton
中删除动作监听器” .. 为什么?根据该问题的答案(是的,我希望看到答案),为按钮创建一个Action
可能会更好。可以禁用Action
,这样做会向用户表明该按钮不可用。
假设按钮在主菜单上,但每次我调用该主菜单时,它都会添加另一个动作监听器。虽然我刚刚解决了谢谢。
【参考方案1】:
获取 ActionListener。
如果您阅读AbstractButton API,JButton 有一个public ActionListener[] getActionListeners()
,它为您提供了一个侦听器数组。获取它们(可能只有一个),然后从按钮中删除它(如果有多个,则使用 for 循环删除它)。
例如
ActionListener[] listeners = btn.getActionListeners();
for (ActionListener listener : listeners)
btn.removeActionListener(listener);
话虽如此,我想知道这是否可能是XY Problem,其中更好的解决方案是采用不同的方法。也许您只需要在侦听器中放置一个布尔语句,并根据类中标志(布尔字段)的状态来改变其行为(它调用的代码)。
【讨论】:
我有点困惑。对不起,我是编码新手。这是 for 循环只是另一种制作动作监听器的方法吗?我的意思是,当我单击按钮时,fooloop 中有什么激活?因为它不起作用。 @L0raxeoC: ???不,它与创建另一个 ActionListener 无关。您的评论让我感到困惑,因为 for 循环完全按照您的要求执行 - 删除给定按钮的所有动作侦听器。以上是关于从 JButton 中删除一个 ActionListener的主要内容,如果未能解决你的问题,请参考以下文章