2014-11-16 37 views
1

我試圖創建一個JPanel,當用戶點擊我的主JFrame中的按鈕時顯示。在Netbeans中,我首先使用嚮導爲我的項目添加了一個新的JPanel,然後我使用GUI創建者填寫所有內容。我不是想用下面的代碼作爲JButton點擊的結果顯示一個JFrame?

private void m_jbShowSelAccResultsActionPerformed(java.awt.event.ActionEvent evt) 
{              
    Account selAcc = getSelectedAccount(); 
    if(selAcc != null) 
    { 
     AccountView accPanel = new AccountView(Account.getDeepCopy(selAcc)); 
     accPanel.setVisible(true); 
    } 
    else 
     ShowMessage("Please select an account to view"); 
}  

但沒有任何反應,顯示JPanel,不會引發錯誤,且未顯示的JPanel。於是我將JPanel更改爲JFrame(Netbeans沒有投訴)。當我用相同的代碼再次嘗試時,我收到錯誤GroupLayout can only be used with one Container at a time

如何顯示我的JPanel/JFrame

回答

2
  1. 要在Swing GUI中更改視圖,請使用CardLayout,因爲這是一種更加健壯和可靠的方法。
  2. 不要試圖盲目地「將JPanel更改爲JFrame」。看起來你只是在這裏猜測。
  3. GroupLayout無法重複使用,因爲錯誤消息告訴你。這個錯誤可能來自上面的問題。如果您避免嘗試將JFrame置於JPanel之外,則錯誤消息可能會消失。另外,GroupLayout不易於手動使用,特別是如果您嘗試將組件添加到已經呈現的GUI中。

因此,舉例來說,如果你的程序有一個JPanel說叫cardHolderPanel,即使用CardLayout,這個持有可變說叫cardLayout,你已經添加了「一卡通」的JPanel這個持有人的賬戶,說叫accPanel,如果accPanel必須設置當前顯示的賬戶的方法,說setAccount(Accoint a),你可以很容易地通過調用CardLayout show(...)方法交換意見,是這樣的:

private void m_jbShowSelAccResultsActionPerformed(java.awt.event.ActionEvent evt) {              
    Account selAcc = getSelectedAccount(); 

    if(selAcc != null) { 
     accPanel.setAccount(Account.getDeepCopy(selAcc)); 
     cardLayout.show(cardHolderPanel, "Account View"); 
    } 
    else { 
     showErrorMessage("Please select an account to view"); 
    } 
}