2013-03-02 91 views
3

我一直試圖從我的Derby數據庫獲取數據並填充由Netbeans GUI構建器創建的jTable。jTable在從數據庫中獲取數據後沒有顯示任何內容

我有一個賬戶類,其中下面的代碼保存:

public static DefaultTableModel buildTableModel() throws SQLException { 
    Vector<Vector<Object>> data = new Vector<Vector<Object>>(); 
    Vector columns = new Vector(); 
    PreparedStatement ps = null; 
    ResultSet rs = null; 
    try { 
     String stmt = "SELECT * FROM APP.DATAVAULT"; 
     ps = Main.getPreparedStatement(stmt); 
     rs = ps.executeQuery(); 
     ResultSetMetaData metaData = rs.getMetaData(); 

     // names of columns 
     Vector<String> columnNames = new Vector<String>(); 
     int columnCount = metaData.getColumnCount(); 
     for (int column = 1; column <= columnCount; column++) { 
      columnNames.add(metaData.getColumnName(column)); 
     } 
     // data of the table 
     while (rs.next()) { 
      Vector<Object> vector = new Vector<Object>(); 
      for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) { 
       vector.add(rs.getObject(columnIndex)); 
      } 
      data.add(vector); 
     } 
    } finally { 
     try { 
      ps.close(); 
     } catch (Exception e) { 
     } 
     try { 
      rs.close(); 
     } catch (Exception e) { 
     } 
    } 
    DefaultTableModel tableModel = new DefaultTableModel(data, columns); 
    return tableModel; 
} 

正如你可以看到它返回與兩個參數,數據和列一個DefaultTableModel。

然後,我的GUI類中,我有以下:

我場:

Account acc = new Account(); 

構造:

public SPPMainGUI() throws SQLException { 
    initComponents(); 
    datavaultjTable.setModel(acc.buildTableModel()); 
} 

我的主要方法:

public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       new SPPMainGUI().setVisible(true); 
      } catch (SQLException ex) { 
       Logger.getLogger(SPPMainGUI.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    }); 
} 

的代碼設置爲populat Ë我的JTable從datavault表中的所有數據,無論記錄哪些用戶在

我有我datavault表中的數據:

enter image description here

而這正是我的JTable的樣子時,我運行我的程序,併成功登錄:

enter image description here

這是它應該是什麼樣子,但人口:

enter image description here

我在哪裏錯了我的代碼?我已經爲此停留了2周。

+2

+1的詳細問題。希望所有的問題都是這個框架:) – Reimeus 2013-03-02 15:05:07

回答

2

您需要添加columnNamescolumns頭數據,否則什麼也不會出現在你的JTable

for (int column = 1; column <= columnCount; column++) { 
    ... 
} 
columns.add(columnNames); <--- add this line 

不是有這個數據冗餘變量,你可以簡單地使用columnNames爲你的模型,而不是:

DefaultTableModel tableModel = new DefaultTableModel(data, columnNames); 
+0

這應該去哪裏?這個jTable是由GUI構建器創建的,所以我不確定我是否應該在jTable的自定義代碼部分內做些什麼。 – 2013-03-02 14:56:45

+1

@JohnVasiliou:應該很明顯。沒有兩個變量試圖做同樣的事情,列和columnNames。只有一個。 1+給雷梅斯。 – 2013-03-02 15:00:04

+0

@HovercraftFullOfEels好點,更新:) – Reimeus 2013-03-02 15:02:44