我正在尝试实现一些我认为应该很容易实现的功能,但是我无法使其正常工作。
我有一个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(),以确保所有组件都使用新的布局重新绘制。