2

JTable にデータベースからのデータを入力しています。私は AbstractTableModel をサブクラス化し、JTable への参照を渡しました。ただし、データベース内の列名を抽出して JTable 内の「ヘッダー」として設定するにはどうすればよいですか?

前もって感謝します。

コンソールにはヘッダー名が表示されますが、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 "";
    }
}
4

5 に答える 5

5

ただし、データベース内の列名を抽出して JTable 内の「ヘッダー」として設定するにはどうすればよいですか?

テーブル モデルは getColumnName() メソッドを実装する必要があります。次に、最初にデータを使用してテーブル モデルを作成する必要があります。次に、テーブル モデルを使用して JTable を作成すると、テーブルによって列が作成されます。

再利用可能なテーブル モデルを提供するコードと、テーブルに自動的にデータを入力する方法については、Table from Databaseを参照してください。

列はまったくありません。すべての行です...

テーブルを (JPanel ではなく) JScrollPane に追加する必要があり、ヘッダーはスクロール ペインの列ヘッダー ビューとして表示されます。

JScrollPane scrollPane = new JScrollPane( table );
于 2011-01-29T21:17:42.403 に答える
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);
        }
    }
}

クラス列、Ctor:

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];
}

このコードははるかに大きなコードベースの一部であり、ずっと前に使用していたので、うまくいくことを願っています。

于 2011-01-30T03:42:00.170 に答える
1

You can do it by overriding getColumnName(int i) method of AbstractTableModel, and put your "header" Strings in this method.

于 2011-01-29T20:04:45.163 に答える
1

getColumnCount もオーバーライドしましたか?

于 2011-01-29T20:44:03.017 に答える
1

どのようにデータを取得しますか? 「SELECT * FROM foo」で?

インターフェース: java.sql.DatabaseMetaData

getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) 指定されたカタログで使用可能なテーブル列の説明を取得します。

于 2011-01-29T20:22:48.990 に答える