gpt4 book ai didi

java - 如何从 JButton 的 ActionListener 内部从 JFrame 中删除 JButton?

转载 作者:行者123 更新时间:2023-12-02 12:51:05 24 4
gpt4 key购买 nike

在编写 Swing 应用程序时,我总是遇到这个问题,我想我最终会得到一个确定的答案,而不是在它开始工作之前一直摆弄它......

我有一个 JFrame。该 JFrame 内部有一个 JButton。在 ActionListener 中,我想几乎清空 JFrame,留下一两个组件(其中包括删除 JButton)。然后应用程序会卡住,因为在 ActionListener 完成之前您无法删除该组件。我该如何解决这个问题?

最佳答案

当您删除组件时,不要忘记在容器上调用 validate()repaint(),并且应该可以正常工作。

import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class RemoveDemo {

static class RemoveAction extends AbstractAction{
private Container container;

public RemoveAction(Container container){
super("Remove me");
this.container = container;
}

@Override
public void actionPerformed(ActionEvent e) {
container.remove((Component) e.getSource());
container.validate();
container.repaint();
}
}

private static void createAndShowGUI() {
final JFrame frame = new JFrame("Demo");
frame.setLayout(new FlowLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

RemoveAction action = new RemoveAction(frame);
frame.add(new JButton(action));
frame.add(new JButton(action));

frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}

关于java - 如何从 JButton 的 ActionListener 内部从 JFrame 中删除 JButton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11661984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com