所以我正在使用JTable
,它与我自己的自定义数据模型相关联。这一切都是功能性的,但我遇到的问题是,无论何时我对表进行更改(触发tableDataChanged,tableStructureChanged等),所有列宽都将自己重置为默认值。我从研究中了解到,这与默认分配的TableColumnModel
有关。除了重置之外,我对DefaultTableColumnModel
的功能感到满意,但是如果用户应该调整列的宽度(通过拖动列标题的边缘),我只想保留列的宽度。 / p>
我知道TableColumns有setPreferredWidth()
,我已经成功地做到了;我想我的问题是我应该听哪种事件来保存并设置这个首选宽度。我尝试在表头中添加PropertyChangeListener
,但是每次尝试调整大小时都会得到StackOverflow(我假设它是递归运行的)。我完全可以在数据模型中为列宽添加一个额外的数据成员,并将其存储在那里,但我不知道何时/如何设置这些宽度以便它们不会被{{覆盖1}}等事件。想法?
答案 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);
}
}