2016-12-28 50 views
0

我有一個菜單欄,用的JPanel信息主JFrame,然後在主框架文本框。我試圖打開其他面板,但主菜單欄出現,並且主框架中的文本框仍保留在新面板中。當我打開一個新面板時,會看到菜單欄,但不是主框架上的文本框。另外,當我嘗試通過關閉新面板重新打開主框架時,我只在主框架中獲得菜單欄,主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();   
}        

回答

0

當我打開一個新的面板,我得到了菜單欄,但不是說是主框架上

正確的文本框中。 Swing組件只能有一個父級。

對於這個問題,您應該使用帶CardLayout的面板來實現面板的輕鬆切換。

所以,你需要:

  1. 交換完整的面板,這意味着你需要創建一個單獨的文本字段爲每個面板。
  2. 交換每個面板的一部分,這意味着文本字段是常見的,只有面板的底部被交換。

選項1應該是自解釋。

對於選項2,請從Swing教程中的部分上How to Use CardLayout。在這個例子中,JComboBox是通用組件(不是JTextField),但概念是相同的。

+0

謝謝;我會看看這個,並嘗試一下。 – Dante