2017-04-24 45 views
1

我試圖從數據庫(我使用Oracle的SQL Developer)將一些數據加載到java中的JTable中。我把數據從矢量的矢量數據庫,這是我的負荷方法,我把一類叫做DBJobs:儘管行數超過1行,JTable只顯示1行

public Vector load() { 
    try { 
     Vector tableData = new Vector(); 
     Conn con = new Conn(); 
     con.openConn(); 
     con.statement = con.dbConn.createStatement(); 
     ResultSet rs = con.statement.executeQuery("Select * from Jobs"); 

     while (rs.next()) { 
      Vector<Object> row = new Vector<Object>(); 
      row.add(rs.getString("Job_ID")); 
      row.add(rs.getString("Job_Title")); 
      row.add(rs.getString("Parent_Job_ID_1")); 
      row.add(rs.getString("Parent_Job_ID_2")); 
      row.add(rs.getString("Description")); 
      tableData.add(row); 
     } 

     con.closeConn(); 
     return tableData; 
    } catch (SQLException ex) { 
     ex.printStackTrace(); 
     return null; 
    } 
} 

然後我試圖填充他們進入我用編輯器做一個JTable在另一個類中:

private void populateJobsTable() { 
    Vector<String> tableHeader = new Vector<String>(); 
    tableHeader.add("Job ID"); 
    tableHeader.add("Job Name"); 
    tableHeader.add("Parent Job ID 1"); 
    tableHeader.add("Parent Job ID 2"); 
    tableHeader.add("Description"); 

    Vector tableData = dbJobs.load(); 
    tblJobs.setModel(new DefaultTableModel(tableData, tableHeader)); 
} 

但是我能看到的是表中的1行數據。我試過打印Vector有多少數據以及表有多少行,它們都返回49,這是我在數據庫中的數據量。那麼爲什麼我的表只顯示1個數據?

編輯: 我認爲這是產生使JTable中的代碼:

的所有
tblJobs = new javax.swing.JTable(); 
tblJobs.setFont(new java.awt.Font("Tempus Sans ITC", 0, 14)); // NOI18N 
    tblJobs.setModel(new javax.swing.table.DefaultTableModel(
     new Object [][] { 
      {null} 
     }, 
     new String [] { 
      "Job Name" 
     } 
    ) { 
     Class[] types = new Class [] { 
      java.lang.String.class 
     }; 
     boolean[] canEdit = new boolean [] { 
      false 
     }; 

     public Class getColumnClass(int columnIndex) { 
      return types [columnIndex]; 
     } 

     public boolean isCellEditable(int rowIndex, int columnIndex) { 
      return canEdit [columnIndex]; 
     } 
    }); 
    tblJobs.setPreferredSize(new java.awt.Dimension(225, 16)); 
    jScrollPane5.setViewportView(tblJobs); 
    if (tblJobs.getColumnModel().getColumnCount() > 0) { 
     tblJobs.getColumnModel().getColumn(0).setResizable(false); 
    } 
+1

表格如何顯示?您是否嘗試過使用虛擬數據而不是從數據庫中加載它? – MadProgrammer

+0

我在編輯器中創建了表格,所以我的代碼中沒有setVisible(true)方法。是的,我試過使用虛擬數據,它仍然只顯示1行。 – Grandevox

+1

考慮提供一個[最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve) – MadProgrammer

回答

1

首先不是一個MCVE。代碼是如何完成的?我們如何編譯和測試代碼?你沒看過我的評論嗎?

我建議你擺脫IDE並學習如何手動創建GUI。使用自定義TableModel生成JTable的IDE的要點是什麼?該代碼完全沒用,因爲您隨後使用創建自己的TableModel並使用setModel(...)方法來替換由IDE創建的模型。

tblJobs.setPreferredSize(new java.awt.Dimension(225, 16)); 

上面的代碼看起來很可疑。您不應該在Swing組件上設置首選大小。表的大小看起來像它一次只能顯示一行。

這不是問題,我會沒有更多的建議,直到發佈適當的MCVE。每個問題應該有一個MCVE,所以我們不花時間猜測你可能會或可能不會做什麼。

+0

我很抱歉,但我不知道我在哪裏可以獲得您要求的MCVE代碼。我使用IDE創建GUI的原因是因爲我不是創建用戶界面(或編碼)的專家,我不想爲每個放置的對象設置位置。如果我的框架上沒有多個對象,我會嘗試手動創建GUI。說這話,我試圖刪除你說的代碼可疑,它的工作!該表現在顯示我的數據庫中的所有數據!非常感謝你的建議,我很抱歉,如果我混淆/挫敗每個人與我的愚蠢...... – Grandevox

+0

@Grandevox,'我使用IDE的原因' - IDE的問題是你學習IDE而不是Java/Swing 。 '而且我不想爲每個放置的對象設置位置。「 - 您不應該設置對象的位置。 Swing旨在與「佈局管理者」一起使用。佈局經理的工作是根據每個佈局管理器的規則來設置組件的大小/位置。閱讀[佈局管理器]上的Swing教程部分(http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html)以獲取更多信息和工作示例,幫助您入門。 – camickr

+0

好吧我會盡力瞭解更多。感謝您的反饋意見! – Grandevox