В качестве обходного пути вы можете добавить на основную панель (используя GridbagLayout) унаследованные панели с кнопками в ней.Затем, когда вы хотите заменить эти кнопки (или любой другой компонент), вы не заменяете их на главной панели.Вы заменяете их в унаследованных панелях.Поскольку вы не даете нам код, вид псевдокода будет выглядеть так:
JButton myBtn = new JButton(); //Theinitial button
JPanel mainPanel = new JPanel(new GridBagLayout()); //main panel
JPanel inheritedPanel = new JPanel(new BorderLayout())//borderlayout to fill the entire panel.
inheritedPanel.add(myBtn,BorderLayout.CENTER);
mainPanel.add(inheritedPanel, myConstraints);
JButton replacementBtn = new JButton;
inheritedPanel.remove(myBtn);
inheritedPanel.add(replacementBtn);
inheritedPanel.repaint();
inheritedPanel.revalidate();