gpt4 book ai didi

java - 动态删除 Java Swing 容器(我的代码在按下按钮时挂起)

转载 作者:行者123 更新时间:2023-12-02 11:00:43 25 4
gpt4 key购买 nike

我正在尝试实现一些我认为应该很容易的东西,但我无法让它发挥作用。我有一个 Jframe,其中包含 2 个 JPanel。我想在其中一个 JPanel 中有一个按钮,单击该按钮将从 JFrame 中删除它所在的 JPanel。 (我现在正在做概念验证,将来会有更多的 JPanel)。

buttonRemove.addActionListener( (e) -> {
buttonRemove.getParent().getParent().remove(buttonRemove.getParent());
});

是我的 ActionListener,它使程序挂起。我在这里理解错了什么?做我想做的事情的最佳实践是什么?

编辑:

FractalBuilder extends JFrame{
public JPanel image;
public JPanel fonction;
public FractalBuilder(){
setLayout( new BorderLayout() );

fonction = new JPanel();
JButton buttonRemove = new JButton(Remove);
buttonRemove.addActionListener( (e) -> {
buttonRemove.getParent().getParent().remove(buttonRemove.getParent());
});
fonction.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints;
fonction.add(buttonRemove, gbc);
add(fonction, BORDER_LAYOUT.WEST);
add(image, BORDER_LAYOUT.EAST);
}

我添加了我认为可能相关的代码,但如果需要,我会添加完整源代码的 github 链接。

最佳答案

当您从可见 GUI 的面板中添加/删除组件时,基本逻辑是:

panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();

您需要 revalidate() 来调用布局管理器,并需要 repaint() 来确保所有组件都使用新布局重新绘制。

关于java - 动态删除 Java Swing 容器(我的代码在按下按钮时挂起),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51351750/

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