Нужно держать textbox и menubar на главном фрейме видимым, когда я открываю другие панели, а затем снова открывает главный фрейм

У меня есть основной JFrame с menubar, jPanel с info и textbox в главном фрейме. Я пытаюсь открыть другие панели, но главное меню появляется плюс текстовое поле из основного кадра остается с новой панелью, показывающей также. Когда я открываю новую панель, я получаю menubar, но не текстовое поле, которое было на главном фрейме. Кроме того, когда я пытаюсь открыть главный фрейм, закрыв новую панель, я только получаю menubar, main jpanel в главном фрейме, но не текстовое поле. Вот мой код. Я не уверен, почему я не получаю текстовые поля под главной панели фрейма, чтобы показать снова. Любая помощь была бы очень признательна.

private void MenuItem_caseOpenActionPerformed(java.awt.event.ActionEvent evt){
    caseNewPanel = new CaseNewPanel();
    this.setContentPane(caseNewPanel);
    this.setTitle("Case Menu");
    this.setSize(1200,800);
    this.setBounds(5, 5, 1200, 800);
    this.invalidate(); this.validate();
    this.repaint();      
}                                                  

private void jButton_exitMouseClicked(java.awt.event.MouseEvent evt) {                                          
    System.exit(0);   
}                                         

private void jMenuItem_caseCloseActionPerformed(java.awt.event.ActionEvent evt) {                                                    
    this.getContentPane().removeAll();
    mainMenuFrame = new MainMenuFrame();
    this.setContentPane(mainMenuFrame.jPanel_mainMenu);
    mainMenuFrame.jPanel_mainMenu.setVisible(true);
    this.setSize(567,304);
    this.setBounds(300, 300, 567,304);
    this.invalidate(); this.validate();
    this.repaint();        
}                             

1 ответ

  1. Когда я открываю новую панель, я получаю menubar, но не текстовое поле, которое было на главном фрейме

    Правильный. Компонент Swing может иметь только одного родителя.

    Для этой проблемы вы должны использовать панель с CardLayout для того чтобы включить легкое переключение панелей.

    Так что вам нужно либо:

    1. замените всю панель, что означает, что вам нужно создать отдельное текстовое поле для каждой панели.
    2. замените часть каждой панели, что означает, что текстовое поле является общим и только нижняя часть панели заменяется.

    Вариант 1 должен быть самоочевидным.

    Для варианта 2 ознакомьтесь с разделом из учебника Swing о том, как использовать CardLayout . В этом примере jcombobox является общим компонентом (не JTextField), но концепция та же.