Jtable保留列宽

时间:2014-01-13 06:38:50

标签: java swing jtable jtableheader preferredsize

我有一个Jtable,其中我使用setDataVector函数设置数据。它工作正常,但假设我只是通过使用鼠标拖动更改了一些列宽,然后在同一个表中加载新数据然后宽度该列重置为它的默认位置。所以基本上我想保留该宽度,即使新数据加载。

3 个答案:

答案 0 :(得分:6)

当您使用setDataVector()方法时,表的结构可能会更改,因此表会自动重新创建TableColumnModel,您将失去自定义。

第一次创建JTable时,请使用以下代码:

JTable table = new JTable(...);
table.setAutoCreateColumnsFromModel( false );

以防止重新创建TableColumnModel。

答案 1 :(得分:1)

这种情况会发生,因为根据重新创建列的文档使用setDataVector()时,您的列宽会更改为默认值。

尝试使用setAutoCreateColumnsFromModel()来阻止这种行为。

答案 2 :(得分:0)

使用自定义表格模型时。不要使用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);