猿问

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

我正在尝试实现一些我认为应该很容易实现的功能,但是我无法使其正常运行。我有一个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链接。


一只萌萌小番薯
浏览 193回答 1
1回答

猛跑小猪

从可见的GUI面板添加/删除组件时,基本逻辑是:panel.remove(...);panel.add(...);panel.revalidate();panel.repaint();您需要revalidate()来调用布局管理器,并需要repaint()来确保所有组件都使用新的布局重新绘制。
随时随地看视频慕课网APP

相关分类

Java
我要回答