Вам нужно вызвать revalidate и repaint для контейнера, который содержит ваш объект panel3 и который здесь использует GridBagLayout после добавления или удаления компонентов. Обратите внимание, что revalidate только для объектов, производных от JComponent, таких как JPanel.
Редактировать 1
Если вы добавляете непосредственно в JFrame, то вы фактически добавляете в его contentPane, который обычно является JPanel. Так что пример выполнения того, что я предложил, будет выглядеть примерно так:
cb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JPanel contentPane = (JPanel) getContentPane();
String s = (String) cb1.getSelectedItem();
if (s.equals("Invoice")) {
panel3Customizera();
g.gridy = 2;
remove(panel3);
contentPane.add(panel3, g);
} else {
panel3Customizerb();
g.gridy = 2;
contentPane.add(panel3, g);
}
contentPane.revalidate();
contentPane.repaint();
}
});
но, сказав это, я должен добавить большой пробел к предложению mre об использовании CardLayout вместо обмена представлениями.