2011-06-23 2 views
9

У меня есть JTable с 3-мя столбцами:Авто размер ширины столбцов JTable динамически

- No. # 
- Name 
- PhoneNumber 

Я хочу сделать определенную ширину для каждой колонки следующим образом:

enter image description here

и я хочу JTable может динамически обновлять ширину своих столбцов (например, вставляя большое количество в столбец #) и сохраняя одинаковый стиль JTable

я решил первую проблему, используя этот код:

myTable.getColumnModel().getColumn(columnNumber).setPreferredWidth(columnWidth); 

, но я не успех, чтобы сделать MYTABLE обновить ширину динамически, только если текущая ширина столбца не соответствует его содержанию. Можете ли вы помочь мне решить эту проблему?

ответ

13

Здесь я нашел свой ответ: http://tips4java.wordpress.com/2008/11/10/table-column-adjuster/
Идея заключается в том, чтобы проверить содержимое некоторых строк чтобы отрегулировать ширину столбца.
В статье автор предоставил полный код загружаемого java-файла.

JTable table = new JTable(...); 
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

for (int column = 0; column < table.getColumnCount(); column++) 
{ 
    TableColumn tableColumn = table.getColumnModel().getColumn(column); 
    int preferredWidth = tableColumn.getMinWidth(); 
    int maxWidth = tableColumn.getMaxWidth(); 

    for (int row = 0; row < table.getRowCount(); row++) 
    { 
     TableCellRenderer cellRenderer = table.getCellRenderer(row, column); 
     Component c = table.prepareRenderer(cellRenderer, row, column); 
     int width = c.getPreferredSize().width + table.getIntercellSpacing().width; 
     preferredWidth = Math.max(preferredWidth, width); 

     // We've exceeded the maximum width, no need to check other rows 

     if (preferredWidth >= maxWidth) 
     { 
      preferredWidth = maxWidth; 
      break; 
     } 
    } 

    tableColumn.setPreferredWidth(preferredWidth); 
} 
1

Используйте метод addRow (...) метода DefaultTableModel для динамического добавления данных в таблицу.

Update:

Для регулировки ширины видимой колонки, я думаю, вам нужно использовать:

tableColumn.setWidth(...); 
+0

упс, я хочу сделать JTable обновления ширины динамически, но я написал чтобы JTable обновлялся динамически, извините –

+0

@Eng Fouad, см. обновление. – camickr

+1

Кстати, принятый ответ на самом деле ваш;) – Matthieu

0

Я тоже сталкиваюсь с этой проблемой. Я нашел одну полезную ссылку, которая решила мою проблему. Довольно много получить конкретную колонку и установите его setMinWidth и setMaxWidth быть такой же (как фиксированная.)

private void fixWidth(final JTable table, final int columnIndex, final int width) { 
    TableColumn column = table.getColumnModel().getColumn(columnIndex); 
    column.setMinWidth(width); 
    column.setMaxWidth(width); 
    column.setPreferredWidth(width); 
} 

Ref: https://forums.oracle.com/thread/1353172

Смежные вопросы