В вашем коде есть несколько проблем, но одна из ваших основных проблем связана с тем, что вы скрываете поле класса JFrame в конструкторе, оставляя поле класса пустым и неиспользуемым.Чтобы это исправить, не объявляйте эту переменную заново.Таким образом, измените это:
JFrame frame = new JFrame("birthday Card Maker!");
на следующее:
// this uses the JFrame variable declared in the class.
frame = new JFrame("birthday Card Maker!");
Затем вы можете использовать эту переменную позже в методе, где вы меняете содержимое contentPane:
public void create_Portrait_Pane() throws Exception {
PortraitGUI portrait = new PortraitGUI();
frame.getContentPane().removeAll(); // now you can use the frame variable
frame.getContentPane().add(portrait);
//!! getContentPane().doLayout();
//!! update(getGraphics()); // WTF?
((JPanel)frame.getContentPane()).revalidate();
frame.repaint();
}
Сказав это, я сам, вероятно, использовал бы JPanel, который использует CardLayout в качестве моего контейнера для обмена представлениями (другими JPanels).
Кроме того, у вас, похоже, здесь есть "псевдо" конструктор:
public JPanel PortraitGUI() throws Exception {
Почему бы просто не использовать настоящий конструктор?:
public PortraitGUI() throws Exception {
setLayout(null);
frontPageP = new JPanel();
frontPageP.setBackground(White);
frontPageP.setSize(350, 400);
frontPageP.setLocation(20, 70);
add(frontPageP);
frontPageL = new JLabel("Front Page");
frontPageL.setLocation(10, 5);
frontPageL.setSize(70, 30);
frontPageL.setHorizontalAlignment(JTextField.CENTER);
add(frontPageL);
setOpaque(true);
}
Также для хорошей практики программирования вам следует избегать использования класса Exception с простым ванилью и вместо этого бросать или перехватывать определенныеисключения.
Далее вы захотите избавиться от привычки использовать абсолютный размер и положение и вместо этого использовать менеджеры по расположению для того, что они делают лучше всего.
Редактировать:
ответов на ваши последние комментарии
Причина, по которой я использовал общедоступный "JPanel" PortraitGUI, заключается в том, что он выдавал ошибку или требуемый тип возврата,
Это исправляло не то, что нужно, поскольку лучшим решением было сделать его истинным конструктором, а не возвращать его.
и я закодировал класс так же, как create_Content_Pane ();с возвращением панели.Кроме того, ошибка требуемого типа возврата появлялась несколько раз.
Опять же, важно знать причину ошибки, а не исправлять ее неправильно.
Обновление(GetGraphics ());также был метод, который я пробовал из примеров кода, которые я нашел с той же проблемой.
Конечно, это не из примера Swing, а скорее из более старого примера AWT.Вы не делаете такого рода кодирование с Swing.