DefautTableModel构造方法传入vector参数的问题

 

今天写了一个用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();

}

}

你可能感兴趣的:(java)