Имя заголовка столбца в JTable, Java - PullRequest
2 голосов
/ 29 января 2011

Я заполняю JTable данными из базы данных.Я подкласса AbstractTableModel и передал ссылку на JTable.Однако, как мне удается извлечь имена столбцов в базе данных и установить их как «заголовки» в JTable?

Заранее спасибо.

У меня уже есть это, в консолиотображаются названия заголовков, но у меня нет колонки в графическом интерфейсе.Я прикрепил 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 "";
    }
}

Ответы [ 5 ]

5 голосов
/ 30 января 2011

Однако, как мне удается извлечь имена столбцов в базе данных и установить их как «заголовки» в JTable?

В вашей табличной модели должен быть реализован метод getColumnName (). Затем вам нужно сначала создать модель таблицы с данными. Затем вы создаете свой JTable, используя модель таблицы, и таблица будет строить столбцы для вас.

См. Таблица из базы данных для кода, который предоставляет модель таблицы многократного использования, а также метод для автоматического заполнения таблицы.

У меня вообще нет столбцов, это все строки ...

Вам необходимо добавить таблицу в JScrollPane (не JPanel), и заголовки появятся как представление заголовка столбца панели прокрутки:

JScrollPane scrollPane = new JScrollPane( table );
1 голос
/ 30 января 2011
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);
        }
    }
}

Class Column, 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];
}

Я надеюсь, что это работает, потому что этот код является частью гораздо большей Codebase, и я давно работал с ним.

1 голос
/ 29 января 2011

Как вы получаете свои данные? С "ВЫБРАТЬ * ОТ Foo"?

Интерфейс: java.sql.DatabaseMetaData

getColumns (Строковый каталог, Строка schemaPattern, String tableNamePattern, String columnNamePattern) Получает описание столбцов таблицы, доступных в указанный каталог.

1 голос
/ 29 января 2011

Вы также переопределяете getColumnCount?

1 голос
/ 29 января 2011

Вы можете сделать это, переопределив метод getColumnName (int i) класса AbstractTableModel и поместив строки "header" в этот метод.

...