2011-01-29 66 views
2

我使用數據庫中的數據填充JTable。我已經分類了AbstractTableModel並將引用傳遞給了JTable。但是,如何設置數據庫中的列名稱並將它們設置爲JTable中的「標題」?JTable,Java中的列標題名稱

在此先感謝。

我已經有了這個,在控制檯中的標題名稱顯示,但我沒有在GUI中的列。我已將JTable附加到選項卡式窗格中的選項卡上。

@Override 
public String getColumnName(int column) { 
    try { 
     System.out.println(dbhandler.getMetaData().getColumnName(column + 1)); 
     return dbhandler.getMetaData().getColumnName(column + 1); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
     return ""; 
    } 
} 
+0

當前顯示的列標題是什麼?默認的A,B,C ..等等? – 2011-01-29 21:07:45

+0

我沒有任何列,它是所有行... – LuckyLuke 2011-01-29 21:16:02

回答

5

但是,我如何設法提取數據庫中的列名並將它們設置爲JTable中的「標題」?

您的表模型需要實現getColumnName()方法。然後,您需要首先使用數據創建表格模型。然後,使用表模型創建您的JTable,表格將爲您構建列。

請參閱Table from Database瞭解提供可重用表模型的代碼以及爲您自動填充表的方法。

我沒有任何列的話,那就是所有的行...

您需要將表添加到JScrollPane中(不是一個JPanel)和標題將出現在列滾動窗格標題視圖:

JScrollPane scrollPane = new JScrollPane(table); 
1

您可以通過重寫getColumnName做(int i)以AbstractTableModel上的方法,並把你的「頭」字符串在此方法。

+0

查看我更新的帖子。 – LuckyLuke 2011-01-29 20:17:23

1

如何獲取數據?用「SELECT * FROM foo」?

接口:java.sql.DatabaseMetaData中

getColumns(字符串目錄,字符串 schemaPattern,字符串 tableNamePattern,字符串 columnNamePattern) 檢索在該 指定目錄中的可用表中的列的描述。

+0

我很抱歉,但我不明白。你能舉個例子嗎?是的,我的sql查詢是SELECT * FROM tablename – LuckyLuke 2011-01-29 20:30:05

+0

是的,作爲一個新的答案可讀性。 – 2011-01-30 03:39:19

1

您是否重寫getColumnCount?

1
private void getColumnsFromDB (Connection connection, String tname) throws SQLException 
{ 
    String query = "SELECT * FROM " + tname; 
    Statement stmt = connection.createStatement(); 
    ResultSet res = stmt.executeQuery (query); 
    ResultSetMetaData rsmd = res.getMetaData(); 
    int numberOfColumns = rsmd.getColumnCount(); 
    boolean searchable = rsmd.isSearchable (1); 
    if (searchable) 
    { 
     for (int j = 1; j <= numberOfColumns; ++j) 
     { 
      Column col = new Column (tname, rsmd, j); 
      // do something with Column (col); 
     } 
    } 
} 

類列,構造函數:

public Column (String t, ResultSetMetaData rsmd, int j) throws SQLException 
{ 
    table = t; 
    name = rsmd.getColumnName (j); 
    schema = rsmd.getSchemaName (j); 
    precision = -1; 
    try 
    { 
     precision = rsmd.getPrecision (j); 
    } 
    catch (NumberFormatException nfe) 
    { 
     System.err.println ("nfe[gtd]: " + nfe + " " + t.getName() + "." + name); 
    } 
    scale = rsmd.getScale (j); 
    catName = rsmd.getCatalogName (j); 
    coltype = rsmd.getColumnType (j); 
    coltypeName = rsmd.getColumnTypeName (j); 
    int nulling = rsmd.isNullable (j); 
    nullable = NULLTYP [nulling]; 
} 

我希望它能夠工作,因爲這個代碼是一個更大的代碼庫的一部分,而且很久以前我就使用它。