我正在尝试实现一些我认为应该很容易实现的功能,但是我无法使其正常工作。
我有一个Jframe,其中包含2个JPanel。
我想在其中一个单击的JPanel中有一个按钮,该按钮将从JFrame中删除它。 (我现在正在做概念验证,将来会有更多的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(),以确保所有组件都使用新的布局重新绘制。

10-06 03:04