7

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

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

4

2 回答 2

2

关于什么

table.setAutoCreateColumnsFromModel(false);

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

于 2014-07-11T12:02:54.457 回答
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);
    }

}
于 2012-04-17T19:41:22.917 回答