如何在JTable中维护用户指定的列宽?

时间:2012-04-17 14:45:55

标签: java jtable

所以我正在使用JTable,它与我自己的自定义数据模型相关联。这一切都是功能性的,但我遇到的问题是,无论何时我对表进行更改(触发tableDataChanged,tableStructureChanged等),所有列宽都将自己重置为默认值。我从研究中了解到,这与默认分配的TableColumnModel有关。除了重置之外,我对DefaultTableColumnModel的功能感到满意,但是如果用户应该调整列的宽度(通过拖动列标题的边缘),我只想保留列的宽度。 / p>

我知道TableColumns有setPreferredWidth(),我已经成功地做到了;我想我的问题是我应该听哪种事件来保存并设置这个首选宽度。我尝试在表头中添加PropertyChangeListener,但是每次尝试调整大小时都会得到StackOverflow(我假设它是递归运行的)。我完全可以在数据模型中为列宽添加一个额外的数据成员,并将其存储在那里,但我不知道何时/如何设置这些宽度以便它们不会被{{覆盖1}}等事件。想法?

2 个答案:

答案 0 :(得分:2)

怎么样?

table.setAutoCreateColumnsFromModel(false);

我也有这个问题,这对我有用!

答案 1 :(得分:1)

尝试这样的事情。

import javax.swing.JTable;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

public class ColumnResizer {

    public static void setColumnPreferredWidth(JTable table, int column,
            int preferredWidth) {
        TableColumnModel columnModel = table.getColumnModel();
        TableColumn tableColumn = columnModel.getColumn(column);
        tableColumn.setPreferredWidth(preferredWidth);
    }

}