2014-01-13 156 views
1

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

+0

我使用一个自定义的TableModel – avinash

回答

6

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

当您创建JTable中第一次使用这样的代码:

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

防止TableColumnModel中被重建。

+0

感谢您的帮助,我曾尝试使用setAutoCreateColumnsFromModel(),但我得到一个这种变化后,空白table.Also我使用Jtable的自定义表模型。 – avinash

+0

@avinash,'我得到一个空白表。'它是一个简单的解决方案,但由于你还没有接受任何你以前的任何问题的答案,我不会花时间帮助那些不理解帮帮我。 – camickr

+0

哦对不起,我没有意识到这个“接受答案”的事情。我将在未来尝试照顾这一点。 – avinash

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);