Java Swing JTable 表格【6:表格模型DefaultTableModel】

上一篇是关于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.这个例子还添加了两个功能,“增加行”和“删除行”这个只是影响视图,即在界面打开运行过程中,界面能看到效果,但是并没有真正修改实体数据,下次打开的时候又会恢复到初始状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱的叹息

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值