Java Swing ActionEvent 无法完成,因为方法要求移除触发它的组件

问题描述 投票:0回答:1

我正在为我正在开发的游戏编写一个简单的 GUI,但我遇到了 ActionListener 方法的问题。这个按钮应该能够在使用不同的方法添加其他组件之前调用 removeAll 方法,但是经过一些测试(和冻结的 GUI)我意识到当按钮本身从容器中移除时,它不再能够访问它.这是一个演示问题的模型:

JFrame frame = new JFrame("GUI example");

JButton exitButton = new JButton("Exit");
frame.add(exitButton);

exitButton.addActionListener(e -> {
    frame.removeAll()
    // methods adding other components (which aren't being reached)
});

有没有办法在转义 ActionListener actionPerformed() 方法的同时使用自定义 ActionListeners 向框架发送命令?

我尝试通过中间方法调用该方法,但没有成功。

我不确定框架上的 ComponentListener 是否是一个好的解决方案,或者如何最好地实现它。我多次听说您不应该向 JFrame 组件添加监听器。

java swing awt actionlistener actionevent
1个回答
-1
投票

一个简单的方法是使用

frame.getComponents()
获取所有组件,然后迭代它们,如果它们不是
exitButton
则执行
frame.remove(component)
。然后在动作侦听器的末尾,您可以删除按钮本身。

© www.soinside.com 2019 - 2024. All rights reserved.