我有一个Jtable,我正在使用setDataVector函数设置数据。它工作正常,但假设如果我只是通过使用鼠标拖动来更改一些列宽,然后在同一个表中加载新数据后,该列的宽度将重置为其默认位置。所以基本上我想保留这个宽度,即使加载新数据。
当您使用 setDataVector() 方法时,表的结构可能会更改,因此表会自动重新创建 TableColumnModel,并且您将丢失自定义项。
首次创建 JTable 时,请使用如下代码:
JTable table = new JTable(...);
table.setAutoCreateColumnsFromModel( false );
以防止重新创建表列模型。
发生这种情况是因为当您根据重新创建列的文档使用setDataVector()
并且列宽更改为默认值时。
尝试使用setAutoCreateColumnsFromModel()
来防止这种行为。
当您使用自定义表模型时。不要使用 setDateVector() 它会重新创建列。您可以使用 setPreferredWidth() 方法手动管理列的宽度,如下所示:
table.setModel(buildTableModel(rs));
TableColumnModel tcm = table.getColumnModel();
tcm.getColumn(0).setPreferredWidth(80);
tcm.getColumn(1).setPreferredWidth(200);
tcm.getColumn(2).setPreferredWidth(100);
tcm.getColumn(3).setPreferredWidth(100);
tcm.getColumn(4).setPreferredWidth(100);