为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只萌萌小番薯 2021-05-13 17:26:44
我正在尝试实现一些我认为应该很容易实现的功能,但是我无法使其正常运行。我有一个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链接。
查看完整描述

1 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

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


panel.remove(...);

panel.add(...);

panel.revalidate();

panel.repaint();

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


查看完整回答
反对 回复 2021-05-26
  • 1 回答
  • 0 关注
  • 192 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信