当我打开其他面板时,需要在主框架上保持文本框和菜单栏可见,然后重新打开主框架

时间:2016-12-28 22:09:41

标签: java swing jframe jpanel

我有一个带有菜单栏的主JFrame,带有信息的jPanel,以及主框架中的文本框。我正在尝试打开其他面板,但主菜单出现加上主框架中的文本框仍然显示新面板。当我打开一个新的面板时,我得到了菜单栏,但没有主框架上的文本框。此外,当我尝试通过关闭新面板重新打开主框架时,我只能获得主框架中的菜单栏主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 个答案:

答案 0 :(得分:0)

  

当我打开一个新面板时,我会看到菜单栏,但不是主框架上的文本框

正确。 Swing组件只能有一个父组件。

对于这个问题,你应该使用带有CardLayout的面板来轻松切换面板。

所以你需要:

  1. 交换完整的面板,这意味着您需要为每个面板创建单独的文本字段。
  2. 交换每个面板的一部分,这意味着文本字段很常见,只交换面板的底部。
  3. 选项1应该是自我解释的。

    对于选项2,请查看How to Use CardLayout上Swing教程中的部分。在这个例子中,JComboBox是公共组件(不是JTextField),但概念是相同的。