【问题标题】:Need to keep textbox and menubar on main frame visible when I open up other panels, then reopen main frame当我打开其他面板时,需要保持主框架上的文本框和菜单栏可见,然后重新打开主框架
【发布时间】:2016-12-28 22:09:41
【问题描述】:

我有一个带有菜单栏的主 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();        
}                             

【问题讨论】:

    标签: java swing jframe jpanel


    【解决方案1】:

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

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

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

    所以你需要:

    1. 交换整个面板,这意味着您需要为每个面板创建一个单独的文本字段。
    2. 交换每个面板的一部分,这意味着文本字段是通用的,只有面板的底部被交换。

    选项 1 应该是不言自明的。

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

    【讨论】:

    • 谢谢;我会看一下并尝试一下。
    猜你喜欢
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多