用JTable和DefaultTableModel的setValueAt()方法捣鼓了几天都没法修改单元格的数据。看了一篇帖子之后找到了解决办法。
参考:http://dean-deng.iteye.com/blog/1148172
Swing组件基本都是采用MVC模式,对于JTable来说,数据由Model处理。JTable默认使用AbstractTableModel,如果需要动态改变JTable的值,需要把JTable的Model设置为DefaultTableModel(AbstractTableModel的实现类),其有个setDataVector方法可以用于改变JTable表格的内容。
Vector data = new Vector();
Vector rowData = new Vector();
Vector columnName = new Vector();
DefaultTableModel defaultTableModel = (DefaultTableModel)table.getModel(); //!创建DefaultTableModel实例!
for(int count = 0;count < numbers.length;count++)
columnName.add(count);
for(int i = 1;i < numbers.length;i++){
if(i == 6){
rowData.add(null);
}
rowData.add(numbers[i]);
}
data.add(rowData);
defaultTableModel.setDataVector(data,columnName); //!把数据交由Model!
//重新setModel前设置一下table的size,不然会使用默认size
table.setPreferredSize(table.getSize());
table.setModel(defaultTableModel); //!把Model放进table里!
改变表格数据之后,如果创建JTable实例的时候调用过setPreferredSize方法,这时重新调用setPreferrdSize方法是必要的,不然列表可能会发生形变
1、重新调用了setPreferredSize方法
2、没重新调用setPreferredSize方法