2012-07-28 98 views
0

我希望有人能夠幫助我解決以下問題。我正在創建一個Java桌面應用程序,其中我有一個包含兩個JPanel的JPanel topicPanel; topicButtonsPanel包含JButton的createEntryButton和topicTabCardsPanel,它實現了CardLayout。當單擊createEntryButton時,我試圖動態創建並添加一個新的包含JTextlabels,JTextFIelds和JButtons的JPanel entryPanel。在topicPanel類中所執行的動作方法中使用的代碼是:動態添加一個JPanel到CardLayout時組件顯示不正確

private void createEntryButtonActionPerformed(java.awt.event.ActionEvent evt) {             
    EntryPanel entryPanel = new EntryPanel(); 
    add(entryPanel); 

    CardLayout cards = (CardLayout) topicTabCardsPanel.getLayout(); 
    cards.addLayoutComponent(entryPanel, "entryPanelCard"); 
    cards.show(topicTabCardsPanel, "entryPanelCard"); 
} 

然而,雖然entryPanel被添加到topicPanel,所述topicPanel內的組件沒有被正確顯示。只有JTextFields顯示正確顯示,JLabel根本不顯示,JButtons只在盤旋時顯示。我還有一個JTextArea,它在懸停時不顯示滾動條。

下面是兩個topicPanel和entryPanel類代碼:

import java.awt.CardLayout; 

public class TopicTab extends javax.swing.JPanel { 

private ProjectPanel projectPanel; 

/** 
* Creates new form TopicTab 
*/ 
public TopicTab(ProjectPanel projectPanel) { 
    initComponents(); 
    this.projectPanel = projectPanel; 
} 

public TopicTab() { 
    initComponents(); 
} 

public static void main(String args[]) { 

    TopicTab topicTab = new TopicTab(); 
    topicTab.setVisible(true); 
} 

/** 
* This method is called from within the constructor to initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is always 
* regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 

    topicButtonsPanel = new javax.swing.JPanel(); 
    createEntryButton = new javax.swing.JButton(); 
    importEntryButton = new javax.swing.JButton(); 
    topicTabCardsPanel = new javax.swing.JPanel(); 
    timelinePanel = new Timeline.TimelinePanel(); 

    setMinimumSize(new java.awt.Dimension(1275, 672)); 
    setPreferredSize(new java.awt.Dimension(1275, 672)); 
    setLayout(new java.awt.BorderLayout()); 

    topicButtonsPanel.setBackground(new java.awt.Color(255, 255, 255)); 

    createEntryButton.setText("Create Entry"); 
    createEntryButton.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      createEntryButtonActionPerformed(evt); 
     } 
    }); 

    importEntryButton.setText("Import Entry"); 

    javax.swing.GroupLayout topicButtonsPanelLayout = new javax.swing.GroupLayout(topicButtonsPanel); 
    topicButtonsPanel.setLayout(topicButtonsPanelLayout); 
    topicButtonsPanelLayout.setHorizontalGroup(
     topicButtonsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(topicButtonsPanelLayout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(createEntryButton) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(importEntryButton) 
      .addContainerGap(1071, Short.MAX_VALUE)) 
    ); 
    topicButtonsPanelLayout.setVerticalGroup(
     topicButtonsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(topicButtonsPanelLayout.createSequentialGroup() 
      .addContainerGap() 
      .addGroup(topicButtonsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(createEntryButton) 
       .addComponent(importEntryButton)) 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
    ); 

    add(topicButtonsPanel, java.awt.BorderLayout.PAGE_START); 

    topicTabCardsPanel.setLayout(new java.awt.CardLayout()); 

    javax.swing.GroupLayout timelinePanelLayout = new javax.swing.GroupLayout(timelinePanel); 
    timelinePanel.setLayout(timelinePanelLayout); 
    timelinePanelLayout.setHorizontalGroup(
     timelinePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 1275, Short.MAX_VALUE) 
    ); 
    timelinePanelLayout.setVerticalGroup(
     timelinePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 627, Short.MAX_VALUE) 
    ); 

    topicTabCardsPanel.add(timelinePanel, "card2"); 

    add(topicTabCardsPanel, java.awt.BorderLayout.CENTER); 
}// </editor-fold>       

private void createEntryButtonActionPerformed(java.awt.event.ActionEvent evt) {             
    EntryPanel entryPanel = new EntryPanel(); 
    add(entryPanel); 

    CardLayout cards = (CardLayout) topicTabCardsPanel.getLayout(); 
    cards.addLayoutComponent(entryPanel, "entryPanelCard"); 
    cards.show(topicTabCardsPanel, "entryPanelCard"); 
}             

// Variables declaration - do not modify      
private javax.swing.JButton createEntryButton; 
private javax.swing.JButton importEntryButton; 
private Timeline.TimelinePanel timelinePanel; 
private javax.swing.JPanel topicButtonsPanel; 
private javax.swing.JPanel topicTabCardsPanel; 
// End of variables declaration     
} 


public class EntryPanel extends javax.swing.JPanel { 

/** 
* Creates new form EntryViewPanel 
*/ 
public EntryPanel() { 
    initComponents(); 
} 

/** 
* This method is called from within the constructor to initialise the form. 
* WARNING: Do NOT modify this code. The content of this method is always 
* regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 

    createEntryDetails = new javax.swing.JPanel(); 
    jLabel2 = new javax.swing.JLabel(); 
    entryTitleLabel = new javax.swing.JLabel(); 
    entryDateLabel = new javax.swing.JLabel(); 
    entryNotesLabel = new javax.swing.JLabel(); 
    jScrollPane2 = new javax.swing.JScrollPane(); 
    entryNotesTextArea = new javax.swing.JTextArea(); 
    entryDayTextField = new javax.swing.JTextField(); 
    entryTitleTextField = new javax.swing.JTextField(); 
    entryMonthTextField = new javax.swing.JTextField(); 
    entryYearTextField = new javax.swing.JTextField(); 
    newEntryDateBackslashLabel = new javax.swing.JLabel(); 
    newEntryDateBackslashLabel1 = new javax.swing.JLabel(); 
    sourceDetailsTabbedPane = new javax.swing.JTabbedPane(); 
    addSourcePanel = new javax.swing.JPanel(); 
    addSourceLabel = new javax.swing.JLabel(); 
    buttonsPanel = new javax.swing.JPanel(); 
    createEntryButtonsPanel = new javax.swing.JPanel(); 
    createEntryButton = new javax.swing.JButton(); 
    backButton = new javax.swing.JButton(); 
    updateEntryButtonsPanel = new javax.swing.JPanel(); 
    backButton1 = new javax.swing.JButton(); 
    updateEntryButton = new javax.swing.JButton(); 

    setMaximumSize(new java.awt.Dimension(1045, 591)); 
    setMinimumSize(new java.awt.Dimension(1275, 672)); 
    setPreferredSize(new java.awt.Dimension(1275, 672)); 
    setLayout(new java.awt.BorderLayout()); 

    jLabel2.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
    jLabel2.setText("Enter new entry details:"); 

    entryTitleLabel.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
    entryTitleLabel.setText("Title:"); 

    entryDateLabel.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
    entryDateLabel.setText("Date (dd/mm/yy):"); 

    entryNotesLabel.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
    entryNotesLabel.setText("Notes:"); 

    entryNotesTextArea.setColumns(20); 
    entryNotesTextArea.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N 
    entryNotesTextArea.setRows(5); 
    jScrollPane2.setViewportView(entryNotesTextArea); 

    entryDayTextField.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N 

    entryTitleTextField.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N 

    entryMonthTextField.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N 

    entryYearTextField.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N 

    newEntryDateBackslashLabel.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
    newEntryDateBackslashLabel.setText("/"); 

    newEntryDateBackslashLabel1.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
    newEntryDateBackslashLabel1.setText("/"); 

    javax.swing.GroupLayout createEntryDetailsLayout = new javax.swing.GroupLayout(createEntryDetails); 
    createEntryDetails.setLayout(createEntryDetailsLayout); 
    createEntryDetailsLayout.setHorizontalGroup(
     createEntryDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(createEntryDetailsLayout.createSequentialGroup() 
      .addContainerGap() 
      .addGroup(createEntryDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(createEntryDetailsLayout.createSequentialGroup() 
        .addComponent(entryTitleLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addGap(69, 69, 69) 
        .addComponent(entryTitleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 348, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addGap(54, 54, 54) 
        .addComponent(entryDateLabel) 
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
        .addComponent(entryDayTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
        .addComponent(newEntryDateBackslashLabel) 
        .addGap(9, 9, 9) 
        .addComponent(entryMonthTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
        .addComponent(newEntryDateBackslashLabel1) 
        .addGap(10, 10, 10) 
        .addComponent(entryYearTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 241, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGroup(createEntryDetailsLayout.createSequentialGroup() 
        .addGap(118, 118, 118) 
        .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 348, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addComponent(entryNotesLabel)) 
      .addContainerGap(437, Short.MAX_VALUE)) 
    ); 
    createEntryDetailsLayout.setVerticalGroup(
     createEntryDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(createEntryDetailsLayout.createSequentialGroup() 
      .addComponent(jLabel2) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addGroup(createEntryDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(entryTitleLabel) 
       .addComponent(entryTitleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addComponent(entryDateLabel) 
       .addComponent(entryDayTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addComponent(entryMonthTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addComponent(entryYearTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addComponent(newEntryDateBackslashLabel) 
       .addComponent(newEntryDateBackslashLabel1)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addGroup(createEntryDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addComponent(entryNotesLabel) 
       .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)) 
      .addGap(0, 9, Short.MAX_VALUE)) 
    ); 

    add(createEntryDetails, java.awt.BorderLayout.PAGE_START); 

    addSourceLabel.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N 
    addSourceLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
    addSourceLabel.setText("Click here to add a new Source"); 
    addSourceLabel.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); 

    javax.swing.GroupLayout addSourcePanelLayout = new javax.swing.GroupLayout(addSourcePanel); 
    addSourcePanel.setLayout(addSourcePanelLayout); 
    addSourcePanelLayout.setHorizontalGroup(
     addSourcePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(addSourcePanelLayout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(addSourceLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 1250, Short.MAX_VALUE) 
      .addContainerGap()) 
    ); 
    addSourcePanelLayout.setVerticalGroup(
     addSourcePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(addSourcePanelLayout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(addSourceLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 437, Short.MAX_VALUE) 
      .addContainerGap()) 
    ); 

    addSourceLabel.getAccessibleContext().setAccessibleName("addSourcePanel"); 

    sourceDetailsTabbedPane.addTab("add source", addSourcePanel); 

    add(sourceDetailsTabbedPane, java.awt.BorderLayout.CENTER); 
    sourceDetailsTabbedPane.getAccessibleContext().setAccessibleDescription("sourceDetailsTabbedPane"); 

    buttonsPanel.setMaximumSize(new java.awt.Dimension(1045, 68)); 
    buttonsPanel.setLayout(new java.awt.CardLayout()); 

    createEntryButtonsPanel.setMaximumSize(new java.awt.Dimension(1045, 68)); 
    createEntryButtonsPanel.setName("createEntryButtonsPanel"); 
    createEntryButtonsPanel.setPreferredSize(new java.awt.Dimension(1045, 68)); 

    createEntryButton.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
    createEntryButton.setText("Create"); 

    backButton.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
    backButton.setText("Back"); 

    javax.swing.GroupLayout createEntryButtonsPanelLayout = new javax.swing.GroupLayout(createEntryButtonsPanel); 
    createEntryButtonsPanel.setLayout(createEntryButtonsPanelLayout); 
    createEntryButtonsPanelLayout.setHorizontalGroup(
     createEntryButtonsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(createEntryButtonsPanelLayout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(backButton, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
      .addComponent(createEntryButton, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addContainerGap(971, Short.MAX_VALUE)) 
    ); 
    createEntryButtonsPanelLayout.setVerticalGroup(
     createEntryButtonsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(createEntryButtonsPanelLayout.createSequentialGroup() 
      .addContainerGap() 
      .addGroup(createEntryButtonsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(backButton, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addComponent(createEntryButton, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)) 
      .addContainerGap(16, Short.MAX_VALUE)) 
    ); 

    buttonsPanel.add(createEntryButtonsPanel, "createEntryButtonsPanel"); 

    updateEntryButtonsPanel.setMaximumSize(new java.awt.Dimension(1045, 68)); 
    updateEntryButtonsPanel.setMinimumSize(new java.awt.Dimension(1045, 68)); 
    updateEntryButtonsPanel.setName("updateEntryButtonsPanel"); 
    updateEntryButtonsPanel.setPreferredSize(new java.awt.Dimension(1045, 68)); 

    backButton1.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
    backButton1.setText("Back"); 

    updateEntryButton.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
    updateEntryButton.setText("Update"); 

    javax.swing.GroupLayout updateEntryButtonsPanelLayout = new javax.swing.GroupLayout(updateEntryButtonsPanel); 
    updateEntryButtonsPanel.setLayout(updateEntryButtonsPanelLayout); 
    updateEntryButtonsPanelLayout.setHorizontalGroup(
     updateEntryButtonsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(updateEntryButtonsPanelLayout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(backButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
      .addComponent(updateEntryButton, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addContainerGap(971, Short.MAX_VALUE)) 
    ); 
    updateEntryButtonsPanelLayout.setVerticalGroup(
     updateEntryButtonsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(updateEntryButtonsPanelLayout.createSequentialGroup() 
      .addContainerGap() 
      .addGroup(updateEntryButtonsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(backButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addComponent(updateEntryButton, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)) 
      .addContainerGap(16, Short.MAX_VALUE)) 
    ); 

    buttonsPanel.add(updateEntryButtonsPanel, "updateEntryButtonsPanel"); 

    add(buttonsPanel, java.awt.BorderLayout.PAGE_END); 
}// </editor-fold>       


// Variables declaration - do not modify      
private javax.swing.JLabel addSourceLabel; 
private javax.swing.JPanel addSourcePanel; 
private javax.swing.JButton backButton; 
private javax.swing.JButton backButton1; 
private javax.swing.JPanel buttonsPanel; 
private javax.swing.JButton createEntryButton; 
private javax.swing.JPanel createEntryButtonsPanel; 
private javax.swing.JPanel createEntryDetails; 
private javax.swing.JLabel entryDateLabel; 
private javax.swing.JTextField entryDayTextField; 
private javax.swing.JTextField entryMonthTextField; 
private javax.swing.JLabel entryNotesLabel; 
private javax.swing.JTextArea entryNotesTextArea; 
private javax.swing.JLabel entryTitleLabel; 
private javax.swing.JTextField entryTitleTextField; 
private javax.swing.JTextField entryYearTextField; 
private javax.swing.JLabel jLabel2; 
private javax.swing.JScrollPane jScrollPane2; 
private javax.swing.JLabel newEntryDateBackslashLabel; 
private javax.swing.JLabel newEntryDateBackslashLabel1; 
private javax.swing.JTabbedPane sourceDetailsTabbedPane; 
private javax.swing.JButton updateEntryButton; 
private javax.swing.JPanel updateEntryButtonsPanel; 
// End of variables declaration     
} 

我使用NetBeans IDE 7.1.2和Java:1.7.0_04。

謝謝

回答

1

所以它看起來像我有這個問題解決。取而代之的

add(entryPanel); 

這是添加entryPanel到topicTab小組,我應該已經加入entryPanel到topicTabsCardPAnel與

topicTabCardsPanel.add(entryPanel); 

愚蠢的錯誤!