2013-04-22 54 views
1

星期一早上我在哪,這意味着是我在Java Swing失敗的時候了!但是非常嚴肅的是,我無法弄清楚爲什麼我的動態創建的JTable在JFrame中添加到JPanel後拒絕顯示,並且非常感謝在隔離這個令人頭疼的問題方面的任何幫助。正如你從代碼中看到的,我已經調用了十幾種不同的方法,但似乎無法得到正確的顯示方式......也許我錯過了一個方法?JTable:向JPanel添加一個,但它不顯示

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package energizingemerald; 


import javax.swing.*; 
import java.awt.Dimension; 
/** 
* 
* @author Ryan 
*/ 
public class SectionManagerFrame extends javax.swing.JFrame { 

    /** 
    * Creates new form SectionManagerFrame 
    */ 
    public SectionManagerFrame() { 
     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() { 

     jButton_Cancel = new javax.swing.JButton(); 
     jButton_OK = new javax.swing.JButton(); 
     jLabel_Title = new javax.swing.JLabel(); 
     jLabel_Description = new javax.swing.JLabel(); 
     jTextField_Title = new javax.swing.JTextField(); 
     jScrollPane2 = new javax.swing.JScrollPane(); 
     jTextArea_Description = new javax.swing.JTextArea(); 
     jButton_Remove = new javax.swing.JButton(); 
     jButton_Add = new javax.swing.JButton(); 
     jButton_Edit = new javax.swing.JButton(); 
     jPanel_Grid = new javax.swing.JPanel(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     addWindowListener(new java.awt.event.WindowAdapter() { 
      public void windowOpened(java.awt.event.WindowEvent evt) { 
       formWindowOpened(evt); 
      } 
     }); 

     jButton_Cancel.setText("Cancel"); 
     jButton_Cancel.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       jButton_CancelMouseClicked(evt); 
      } 
     }); 

     jButton_OK.setText("OK"); 
     jButton_OK.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       jButton_OKMouseClicked(evt); 
      } 
     }); 

     jLabel_Title.setText("Review Title:"); 

     jLabel_Description.setText("Review Description:"); 

     jTextArea_Description.setColumns(20); 
     jTextArea_Description.setRows(5); 
     jScrollPane2.setViewportView(jTextArea_Description); 

     jButton_Remove.setText("Remove"); 

     jButton_Add.setText("Add"); 

     jButton_Edit.setText("Edit"); 

     javax.swing.GroupLayout jPanel_GridLayout = new javax.swing.GroupLayout(jPanel_Grid); 
     jPanel_Grid.setLayout(jPanel_GridLayout); 
     jPanel_GridLayout.setHorizontalGroup(
      jPanel_GridLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 0, Short.MAX_VALUE) 
     ); 
     jPanel_GridLayout.setVerticalGroup(
      jPanel_GridLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 268, Short.MAX_VALUE) 
     ); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(122, 122, 122) 
         .addComponent(jButton_Cancel) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
         .addComponent(jButton_OK) 
         .addGap(0, 0, Short.MAX_VALUE)) 
        .addGroup(layout.createSequentialGroup() 
         .addContainerGap() 
         .addComponent(jPanel_Grid, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
         .addGap(18, 18, 18) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
          .addComponent(jButton_Remove, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
          .addComponent(jButton_Add, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
          .addComponent(jButton_Edit, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE))) 
        .addGroup(layout.createSequentialGroup() 
         .addContainerGap() 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
          .addComponent(jLabel_Description) 
          .addComponent(jLabel_Title)) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
         .addComponent(jTextField_Title)) 
        .addGroup(layout.createSequentialGroup() 
         .addContainerGap() 
         .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 587, Short.MAX_VALUE))) 
       .addContainerGap()) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(jLabel_Title) 
        .addComponent(jTextField_Title, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
       .addComponent(jLabel_Description) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
       .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 196, Short.MAX_VALUE) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createSequentialGroup() 
         .addComponent(jButton_Add) 
         .addGap(3, 3, 3) 
         .addComponent(jButton_Edit) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
         .addComponent(jButton_Remove)) 
        .addComponent(jPanel_Grid, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addGap(18, 18, 18) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(jButton_Cancel) 
        .addComponent(jButton_OK)) 
       .addContainerGap()) 
     ); 

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

    private void jButton_CancelMouseClicked(java.awt.event.MouseEvent evt) {            
     // TODO add your handling code here: 
     this.setVisible(false); 
     this.dispose(); 
    }           

    private void jButton_OKMouseClicked(java.awt.event.MouseEvent evt) {           
     // TODO add your handling code here: 
    }          

    private void formWindowOpened(java.awt.event.WindowEvent evt) {         
     // TODO add your handling code here: 
     //ManagerDataModel newManagerDataModel = new ManagerDataModel(); 
     /* 
     newManagerDataModel.AddColumn("Section Name"); 
     newManagerDataModel.AddColumn("Section Type"); 
     newManagerDataModel.AddColumn("# of Particles"); 
     newManagerDataModel.AddRow(new String[]{"Test","Test","Test"}); 
     */ 
     jTable_Sections = new JTable(5, 5); 
     //jTable_Sections.setPreferredScrollableViewportSize(new Dimension(500, 500)); 
     jTable_Sections.setMinimumSize(new Dimension(200, 200)); 
     jTable_Sections.setFillsViewportHeight(true); 
     jScrollPane_Sections = new JScrollPane(jTable_Sections); 
     jScrollPane_Sections.setMinimumSize(new Dimension(200, 200)); 
     jPanel_Grid.add(jTable_Sections); 
     jPanel_Grid.add(jScrollPane_Sections); 
     jPanel_Grid.validate(); 
     jPanel_Grid.repaint(); 
     this.validate(); 
     this.pack(); 
     this.repaint(); 


    }         
    private JTable jTable_Sections; 
    private JScrollPane jScrollPane_Sections; 
    /** 
    * @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(SectionManagerFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(SectionManagerFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(SectionManagerFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(SectionManagerFrame.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 SectionManagerFrame().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify      
    private javax.swing.JButton jButton_Add; 
    private javax.swing.JButton jButton_Cancel; 
    private javax.swing.JButton jButton_Edit; 
    private javax.swing.JButton jButton_OK; 
    private javax.swing.JButton jButton_Remove; 
    private javax.swing.JLabel jLabel_Description; 
    private javax.swing.JLabel jLabel_Title; 
    private javax.swing.JPanel jPanel_Grid; 
    private javax.swing.JScrollPane jScrollPane2; 
    private javax.swing.JTextArea jTextArea_Description; 
    private javax.swing.JTextField jTextField_Title; 
    // End of variables declaration     
} 
+0

嘗試將「JTable」首先添加到「JScrollPane」中,然後將其添加到「JPanel」。 – 2013-04-22 13:21:49

+0

你有一個'JTable'的問題,但你添加了一堆完全不相關的代碼。爲什麼不把它降到最低? – Robin 2013-04-22 13:28:16

+0

@Robin在我調試時,我丟失了FlowLayout的PreferredSize,可能我錯了編輯:-)這個問題在這裏被問了幾次,在運行時添加到JPanel的JScrollPane(無論什麼)被使用GroupLayout忽略 – mKorbel 2013-04-22 13:29:28

回答

4

不GroupLayout的球迷,但很簡單的修復程序

  • 不使用private void formWindowOpened(java.awt.event.WindowEvent evt) {用於添加JComponents已經可見的容器,因爲大小調整引起的,與Swing GUI閃爍

  • GroupLayout必須在兩個方向上覆蓋Min,Max和PreferredSize,否則將被忽略(默認情況下,請參閱生成的代碼)

  • 的JPanel已在的FlowLayout實現API,然後JTable中包裹在JScollPane在GroupLayout的丟失(肯定有一定的解決方案)可能與setMin,Max和PREFERREDSIZE

    發出

所需的代碼(不解決的東西我的下一個點)

private void formWindowOpened(java.awt.event.WindowEvent evt) { 
    jTable_Sections = new JTable(5, 5); 
    jTable_Sections.setFillsViewportHeight(true); 
    jScrollPane_Sections = new JScrollPane(jTable_Sections); 
    jPanel_Grid.setLayout(new BorderLayout()); 
    jPanel_Grid.add(jScrollPane_Sections); 
    this.validate(); 
    this.repaint(); 
    this.pack(); 
} 
  • 此代碼可能是約50-70行代碼的情況下,所有的代碼將通過你的手製造