Установка ширины столбца JTable из другого класса

    public TableModel getTableData() {
     TableModel model=null;
    try {
        String sql = "SELECT eventID as 'Event ID', date as 'Date',eventName as 'Name', time as 'Start Time' FROM Event";
        pst = conn.prepareStatement(sql); 
        rs = pst.executeQuery();
        model = (DbUtils.resultSetToTableModel(rs));
       //CODE TO SET WIDTH OF JTABLE IN VIEWS
        }
    catch(SQLException e){
        e.printStackTrace();
    }
   finally {
        try {rs.close(); pst.close();}
        catch(SQLException e){}     }                                 
       return model; 
}

Выше показан метод класса Model, отвечающий за настройку модели таблицы для таблицы, которая у меня есть в представлениях под названием tableEvent.

Класс Controller использует описанный выше метод для изменения состояния класса tableEvent of Views. Обратите внимание, что tableEvent в представлениях пусто/ничего. Модель передает значения rs в Controller, что затем изменит отображение таблицы и заполнит значения.

Вот что я имею в виду:

view.tableEvent.setModel(model.getTableData());

Однако я пытаюсь установить ширину столбцов в Model, а не в Views через tableEvent.getColumnModel().getColumn(1).setPreferredWidth(60);. если я передам саму таблицу методу getTableData(), чтобы установить ширину столбца, это действительно не работает. Есть ли способ указать желаемую ширину первых 4 столбцов таблицы в классе Model в методе geTableData() каким-то образом, чтобы она всегда была согласованной. Прямо сейчас у меня есть это в части конструктора класса Views, что, очевидно, означает его только для моей желаемой ширины только при инициализации.


person MooHa    schedule 23.01.2013    source источник


Ответы (1)


Если JTable или TableModel пусты и не содержат информации о столбцах, вам необходимо предоставить эту информацию самостоятельно.

Вы можете либо создать новый TableColumnModel, добавить к нему требуемый TableColumns, предоставив необходимую/необходимую информацию о ширине, и применить эту модель к JTable.

Затем вам нужно будет заполнить TableModel и предоставить его также JTable.

Лично я бы извлек метаданные из ResultSet ДО того, как попытаюсь извлечь из него данные.

person MadProgrammer    schedule 23.01.2013
comment
вы видите, что приведенный выше метод возвращает модель, которая уже включает в себя столбцы, которые уже используются таблицей в представлении. Итак, как я могу связать размер столбца с ним при его возврате? - person MooHa; 24.01.2013
comment
Я предполагаю, что вы возвращаете TableModel, который содержит только имя и номер столбца. JTable использует эту информацию для автоматического создания столбцов (по умолчанию это можно изменить). Вам нужно каким-то образом также поставить TableColumnModel. Я бы изменил метод, чтобы вернуть вам собственную модель, содержащую TableModel и TableColumnModel - person MadProgrammer; 24.01.2013