我正在嘗試實(shí)現(xiàn)一些我認(rèn)為應(yīng)該很容易實(shí)現(xiàn)的功能,但是我無法使其正常運(yùn)行。我有一個(gè)Jframe,其中包含2個(gè)JPanel。我想在其中一個(gè)單擊的JPanel中具有一個(gè)按鈕,該按鈕將從JFrame中刪除該JPanel。(我現(xiàn)在正在做概念驗(yàn)證,將來會(huì)有更多的JPanel)。buttonRemove.addActionListener( (e) -> { buttonRemove.getParent().getParent().remove(buttonRemove.getParent());});是我的ActionListener,它使程序掛起。我在這里理解錯(cuò)了什么?做我想做的最佳實(shí)踐是什么?編輯: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);}我添加了我認(rèn)為可能相關(guān)的代碼,但是如果需要的話,將為完整的源代碼添加github鏈接。
1 回答

猛跑小豬
TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
從可見的GUI面板添加/刪除組件時(shí),基本邏輯是:
panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();
您需要revalidate()來調(diào)用布局管理器,并需要repaint()來確保所有組件都使用新的布局重新繪制。
添加回答
舉報(bào)
0/150
提交
取消