Изменение размера столбца Jtable не будет работать - PullRequest
1 голос
/ 14 марта 2009
//can set column widths using percentages   
private void setPreferredTableColumnWidths(JTable table, double[] percentages) 
{
    Dimension tableDim = table.getSize(); 

    double total = 0; 
    for(int i = 0; i < table.getColumnModel().getColumnCount(); i++) 
      total += percentages[i]; 

    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    for(int i = 0; i < table.getColumnModel().getColumnCount(); i++) 
    { 
      TableColumn column = table.getColumnModel().getColumn(i); 
      column.setPreferredWidth((int) (tableDim.width * (percentages[i] / total)));
    }
}

Я хочу иметь возможность изменять ширину JTable в процентах от общей ширины таблицы. Вышеприведенный код выглядит так, как будто он должен работать, но я получаю столбцы равной ширины только тогда, когда я вызываю его с помощью "setPreferredTableColumnWidths (table, new double [] {.01, .4, .2, .2, .2});"

В чем может быть проблема?

Ответы [ 2 ]

1 голос
/ 26 августа 2009

Ваш код работает нормально, но в зависимости от того, где вы его называете, таблица может иметь или не иметь ширину. В конструкторе Panel (или любой другой таблицы) ширина еще не указана.

Я поместил вызов вашего метода в метод paint (). Но не забудьте отследить и вызывать его только один раз, иначе размер столбцов будет меняться снова и снова.

@Override
public void paint(Graphics g) {
    super.paint(g);

    if(! this.initialSizeSet){
        this.setPreferredTableColumnWidths(this.table, new double[] {0.1, 0.1, 0.5, 0.3});
        this.initialSizeSet = true;
    }
}
0 голосов
/ 16 марта 2009

Попробуйте добавить строку:

table.doLayout ();

В конце метода.

...