今天写了一个用DefaultTableModel实现JTable的例子,结果发现在给
DefaultTableModel(Vector data,Vector columnNames)传入参数data时,
如果直接加普通对象(非Vecto类型的对象)
加入现有的data中,接着就将当前的这个data加入
DefaultTableModel(Vector data,Vector columnNames)构造方法中
会报类型强制转换的异常或者是内存溢出的错误
所以要想给DefaultTableModel(Vector data,Vector columnNames)
传入Vector类型的data,这个data必须里面添加的必须是一个Vector类型的数据
下面的代码中如果我们直接将"1","2",..直接加入data,使用这样的data构造DefaultTableModel
就会产生上面的错误。
因此下面的代码我们先使用了一个Vector类型的rowData添加非Vector类型的普通对象
接着将rowData加Vector类型的data中,最后才将封装了Vector类型的data加入DefaultTableModel中
package test;
import javax.swing.table.DefaultTableModel;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JTableUpdate implements ActionListener{
private DefaultTableModel tableModel = null;
private JTable table = null;
private JScrollPane scrollPane = null;
private Vector rowData = null;
private Vector columnNames = null;
private Vector data = null;
private JButton button = null;
private JPanel panel = new JPanel();
private JPanel panel2 = new JPanel();
JFrame frame = null;
Container contentPane = null;
public JTableUpdate(){
//设置表头字段名称
columnNames = new Vector();
for(int i=0;i<4;i++){
columnNames.add("第" +(i+1) + "列");
}
rowData = new Vector();
data = new Vector();
//开始表中的数据是1,2,3,4
rowData.add("1");
rowData.add("2");
rowData.add("3");
rowData.add("4");
data.add(rowData);
//使用DefaultTableModel构建表格
tableModel = new DefaultTableModel(data,columnNames);
table = new JTable(tableModel);
scrollPane = new JScrollPane(table);
frame = new JFrame("JTableUpdate");
button = new JButton("更新数据");
button.addActionListener(this);
panel.add(button);
//把带按钮的panel和带表格的scrollPane加到panel2中
panel2.add(panel);
panel2.add(scrollPane);
contentPane = frame.getContentPane();
//添加有更新按钮和表格进入contentPane
contentPane.add(panel2);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args){
new JTableUpdate();
}
@Override
//点击更新按钮后,就更新表中数据
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
//清空vector中的数据
rowData.clear();
data.clear();
//假设要更新的数据是5,6,7,8
rowData.add("5");
rowData.add("6");
rowData.add("7");
rowData.add("8");
data.add(rowData);
//使用DefaultTableModel设置表格
tableModel.setDataVector(data, columnNames);
table.setModel(tableModel);
//更新UI
panel2.updateUI();
}
}