2015-06-16 65 views
0

我想在使用GridBagLayout的JPanel中添加兩個滾動窗格以及一個標籤和一個按鈕。第一個滾動窗格包含JList,第二個滾動窗格包含JTable。下面是代碼:將滾動窗格添加到GridBagLayout

JPanel capabilityPanel = new JPanel(new GridBagLayout()); 
    GridBagConstraints constraints = new GridBagConstraints(); 

    JScrollPane capabilityScrollPane = new JScrollPane(cbList, 
      ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, 
      ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 


    JScrollPane capabilityTableScrollPane = new JScrollPane(table, 
      ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, 
      ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 

    JButton saveButton = new JButton("Save Table Values"); 

    JLabel capabilityLabel = new JLabel("Boolean Capability List"); 
    constraints.fill = GridBagConstraints.HORIZONTAL; 
    constraints.gridx = 0; 
    constraints.gridy = 0; 
    capabilityPanel.add(capabilityLabel, constraints); 

    constraints.gridx = 1; 
    constraints.gridy = 0; 
    capabilityPanel.add(capabilityScrollPane,constraints); 

    constraints.gridx = 0; 
    constraints.gridy = 1; 
    capabilityPanel.add(saveButton, constraints); 

    constraints.gridx = 1; 
    constraints.gridy = 1; 
    capabilityPanel.add(capabilityTableScrollPane, constraints); 

的問題是,當我直接添加表在面板代替相應的滾動窗格,它在屏幕上正確顯示。但是當我添加滾動窗格時,只顯示三個元素,根本沒有顯示錶格。我希望桌子可以滾動顯示。

你能幫我解決這種情況嗎?

+2

1)爲了更好地幫助越早,張貼[MCVE](http://stackoverflow.com/help/mcve)(最小完備可驗證實施例)或[SSCCE](http://www.sscce.org/)(簡短,獨立,正確的例子)。 2)以最小尺寸提供ASCII藝術或簡單的GUI佈局圖,並且如果可調整大小,則具有更大的寬度和高度。 –

+0

試試[this](http://stackoverflow.com/a/21943545/230513)。 – trashgod

回答

0

它將創建一個outerpanel
兩個內面板
一個用於列表
一個用於表
佈局

Layout Structure

包newpackage;

public class NewJFrame extends javax.swing.JFrame { 

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

/** 
* 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() { 

    outerPanel = new javax.swing.JPanel(); 
    listPanel = new javax.swing.JPanel(); 
    jLabel1 = new javax.swing.JLabel(); 
    jScrollPane1 = new javax.swing.JScrollPane(); 
    jList1 = new javax.swing.JList(); 
    tablePanel = new javax.swing.JPanel(); 
    jScrollPane2 = new javax.swing.JScrollPane(); 
    jTable1 = new javax.swing.JTable(); 
    jButton1 = new javax.swing.JButton(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    outerPanel.setLayout(new java.awt.BorderLayout()); 

    jLabel1.setText("Boolean Capability List"); 

    jList1.setModel(new javax.swing.AbstractListModel() { 
     String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", " " }; 
     public int getSize() { return strings.length; } 
     public Object getElementAt(int i) { return strings[i]; } 
    }); 
    jScrollPane1.setViewportView(jList1); 

    javax.swing.GroupLayout listPanelLayout = new javax.swing.GroupLayout(listPanel); 
    listPanel.setLayout(listPanelLayout); 
    listPanelLayout.setHorizontalGroup(
     listPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(listPanelLayout.createSequentialGroup() 
      .addComponent(jLabel1) 
      .addGap(0, 177, Short.MAX_VALUE)) 
     .addComponent(jScrollPane1) 
    ); 
    listPanelLayout.setVerticalGroup(
     listPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(listPanelLayout.createSequentialGroup() 
      .addComponent(jLabel1) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(0, 15, Short.MAX_VALUE)) 
    ); 

    outerPanel.add(listPanel, java.awt.BorderLayout.NORTH); 

    jTable1.setModel(new javax.swing.table.DefaultTableModel(
     new Object [][] { 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null}, 
      {null, null, null, null} 
     }, 
     new String [] { 
      "Title 1", "Title 2", "Title 3", "Title 4" 
     } 
    )); 
    jScrollPane2.setViewportView(jTable1); 

    jButton1.setText("Save Values"); 

    javax.swing.GroupLayout tablePanelLayout = new javax.swing.GroupLayout(tablePanel); 
    tablePanel.setLayout(tablePanelLayout); 
    tablePanelLayout.setHorizontalGroup(
     tablePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(tablePanelLayout.createSequentialGroup() 
      .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 303, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(0, 0, Short.MAX_VALUE)) 
     .addGroup(tablePanelLayout.createSequentialGroup() 
      .addGap(101, 101, 101) 
      .addComponent(jButton1) 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
    ); 
    tablePanelLayout.setVerticalGroup(
     tablePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(tablePanelLayout.createSequentialGroup() 
      .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 201, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(27, 27, 27) 
      .addComponent(jButton1) 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
    ); 

    outerPanel.add(tablePanel, java.awt.BorderLayout.SOUTH); 

    getContentPane().add(outerPanel, java.awt.BorderLayout.CENTER); 

    pack(); 
}// </editor-fold>       

/** 
* @param args the command line arguments 
*/ 
public static void main(String args[]) { 
    /* Set the Nimbus look and feel */ 
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
    * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
    */ 
    try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
    } catch (ClassNotFoundException ex) { 
     java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
     java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } 
    //</editor-fold> 

    /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new NewJFrame().setVisible(true); 
     } 
    }); 
} 

// Variables declaration - do not modify      
private javax.swing.JButton jButton1; 
private javax.swing.JLabel jLabel1; 
private javax.swing.JList jList1; 
private javax.swing.JScrollPane jScrollPane1; 
private javax.swing.JScrollPane jScrollPane2; 
private javax.swing.JTable jTable1; 
private javax.swing.JPanel listPanel; 
private javax.swing.JPanel outerPanel; 
private javax.swing.JPanel tablePanel; 
// End of variables declaration     
} 

輸出

Final Output

+0

美妙的馬丹!很棒!只是一個問題。是否可以將外部面板垂直放置在另一個面板內?實際上,我必須將這個設置(標籤,兩個滾動窗格,按鈕)放置在一個textatea的下方,該textatea已經在面板中。現在,當我將outerPanel添加到已存在的面板中時,outerPanel佔據了整個空間,我的文本區域不可見。 – user3274247

+0

我建議你使用Netbeans,因爲它很容易通過簡單的拖放來設計你的佈局。並且在java中使用不同的佈局來展示如何使用它們。 – Madhan

+0

我只使用netbeans,但並不知道這個特性。再次感謝 ! – user3274247