上一篇是关于AbstractTableModel的例子,这一篇是关于DefaultTableModel的例子
AbstractTableModel和DefaultTableModel的异同
DefaultTableModel比AbstractTableModel要简单许多,也尝尝在实际开发中使用,DefaultTableModel内部使用Vector数据结构来存储数据表格的数据,若要显示的表格格式比较简单,可以使用DefaultTableModel类,若要显示的数据模式非常复杂,例如表格显示的信息因人而异,这种情况可以使用AbstractTableModel类。
DefaultTableModel构造方法如下
DefaultTableModel创建表格的例子
package com.acconsys.swing.chapter14;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
/**
* 展示如何使用DefaultTableModel类创建表格
*
* @author burns
*
*/
public class Test8 implements ActionListener {
JTable table = null;
DefaultTableModel defaultModel = null;
public Test8() {
JFrame f = new JFrame();
Object[][] p = {
{ "王鹏", new Integer(91), new Integer(1949), new Integer(1910) },
{ "朱学莲", new Integer(82), new Integer(1969), new Integer(1510) },
{ "梅婷", new Integer(47), new Integer(1957), new Integer(1040) },
{ "赵龙", new Integer(61), new Integer(1957), new Integer(1180) },
{ "李兵", new Integer(90), new Integer(1987), new Integer(1770) }, };
String[] n = { "姓名", "工号", "出生年月", "薪水" };
// 创建一个默认的表格模型
defaultModel = new DefaultTableModel(p, n);
table = new JTable(defaultModel);
table.setPreferredScrollableViewportSize(new Dimension(400, 80));
JScrollPane s = new JScrollPane(table);
JPanel panel = new JPanel();
JButton b = new JButton("增加行");
panel.add(b);
panel.add(b);
b.addActionListener(this);
b = new JButton("删除行");
panel.add(b);
panel.add(b);
b.addActionListener(this);
Container contentPane = f.getContentPane();
contentPane.add(panel, BorderLayout.NORTH);
contentPane.add(s, BorderLayout.CENTER);
f.setTitle("AddRemoveCells");
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("增加行")) {
// 如果点击"增加行"按钮后,会在表中增加一行
defaultModel.addRow(new Vector());
}
if (e.getActionCommand().equals("删除行")) {
// 如果点击"删除行"按钮后,会在表中删除所选中的一行,并且设置下一行为当前行
int rowcount = defaultModel.getRowCount() - 1;
// getRowCount返回行数,rowcount<0代表已经没有行了
if (rowcount >= 0) {
defaultModel.removeRow(rowcount);
defaultModel.setRowCount(rowcount);
/**
* 删除行比较简单,只要用DefaultTableModel的removeRow方法即可
* 删除行完毕后必须重新设置列数,也就是使用DefaultTableModel的setRowCount()方法来设置当前行
*/
}
}
table.revalidate();
}
public static void main(String[] args) {
new Test8();
}
}
说明如下:
1.这个DefaultTableModel直接调用构造方法将数据和表头生成模型对象,然后加入到JTable中。
2.这个例子还添加了两个功能,“增加行”和“删除行”这个只是影响视图,即在界面打开运行过程中,界面能看到效果,但是并没有真正修改实体数据,下次打开的时候又会恢复到初始状态。