【图形界面】利用JTable和Vector历史集合类实现 数据层 表现层 数据交换

如何创建一个JTable?

(1)找到JTable类的构造方法:

这里写图片描述

使用:JTable(TableModel dm)构造方法

(2)找到TableModel接口的构造方法:

这里写图片描述

使用:TableModel接口的实现类DefaultTableModel类的构造方法

(3)构造参数Vector类型的data和columNames:

//声明表数据data
Vector<Vector<Object>> data=new Vector<Vector<Object>>();
//声明表头columnNames
Vector<String> columnNames=new Vector<String>();

为data添加表格数据、columnNames添加表头标题

//添加第一行表数据
Vector<Object> v1=new Vector<Object>();
v1.add("Jack");
v1.add(23);
data.add(v1);
//添加第二行表数据
Vector<Object> v2=new Vector<Object>();
v2.add("Rose");
v2.add(11);
data.add(v2);
//声明表头标题
columnNames.add("姓名");
columnNames.add("年龄");

(4)创建DefaultTableModel:

DefaultTableModel dtm=new DefaultTableModel(data, columnNames);

(5)创建JTable:

JTable jtable=new JTable(dtm);

至此,JTable创建完毕,接下来就是如何使用JTable!

如何交换JTable的表现层、数据层的数据?

(1)表现层:

setTitle("JTable演示");
setBounds(100, 200, 500, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c=getContentPane();

//声明表数据data
Vector<Vector<Object>> data=new Vector<Vector<Object>>();
//添加第一行表数据
Vector<Object> v1=new Vector<Object>();
v1.add("Jack");
v1.add(23);
data.add(v1);
//添加第二行表数据
Vector<Object> v2=new Vector<Object>();
v2.add("Rose");
v2.add(11);
data.add(v2);

//声明表头columnNames
Vector<String> columnNames=new Vector<String>();
columnNames.add("姓名");
columnNames.add("年龄");

//创建dtm
final DefaultTableModel dtm=new DefaultTableModel(data, columnNames);
JTable jtable=new JTable(dtm);
c.add(new JScrollPane(jtable));

//用于逻辑层收集数据
JPanel jpl=new JPanel();
JLabel jlbName=new JLabel("姓名");
jpl.add(jlbName);
final JTextField tfdName=new JTextField(10);
jpl.add(tfdName);
JLabel jlbAge=new JLabel("年龄");
jpl.add(jlbAge);
final JTextField tfdAge=new JTextField(10);
jpl.add(tfdAge);
c.add(jpl,BorderLayout.SOUTH);
setVisible(true);

(2)逻辑层:

逻辑层—-添加按钮的监听

//逻辑层----添加按钮的监听
JButton  btnAdd=new JButton("添加");
jpl.add(btnAdd);
btnAdd.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        //收集数据
        String name=tfdName.getText();
        String age=tfdAge.getText();
        //组织数据-----将收集好的数据,封装为一行
        Vector<Object> rowData=new Vector<Object>();
        rowData.add(name);
        rowData.add(age);
        //添加到整个dtm中
        dtm.addRow(rowData);
    }
});

执行结果:

这里写图片描述这里写图片描述

完整代码示例:::


package teachDemo;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

public class JTableDemo extends JFrame{
    public JTableDemo(){
        setTitle("JTable演示");
        setBounds(100, 200, 500, 300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container c=getContentPane();

        //声明表数据data
        Vector<Vector<Object>> data=new Vector<Vector<Object>>();
        //添加第一行表数据
        Vector<Object> v1=new Vector<Object>();
        v1.add("Jack");
        v1.add(23);
        data.add(v1);
        //添加第二行表数据
        Vector<Object> v2=new Vector<Object>();
        v2.add("Rose");
        v2.add(11);
        data.add(v2);

        //声明表头columnNames
        Vector<String> columnNames=new Vector<String>();
        columnNames.add("姓名");
        columnNames.add("年龄");

        //创建dtm
        final DefaultTableModel dtm=new DefaultTableModel(data, columnNames);
        JTable jtable=new JTable(dtm);
        c.add(new JScrollPane(jtable));

        //用于逻辑层收集数据
        JPanel jpl=new JPanel();
        JLabel jlbName=new JLabel("姓名");
        jpl.add(jlbName);
        final JTextField tfdName=new JTextField(10);
        jpl.add(tfdName);
        JLabel jlbAge=new JLabel("年龄");
        jpl.add(jlbAge);
        final JTextField tfdAge=new JTextField(10);
        jpl.add(tfdAge);

        //逻辑层
        JButton  btnAdd=new JButton("添加");
        jpl.add(btnAdd);
        btnAdd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //收集数据
                String name=tfdName.getText();
                String age=tfdAge.getText();
                //组织数据-----将收集好的数据,封装为一行
                Vector<Object> rowData=new Vector<Object>();
                rowData.add(name);
                rowData.add(age);
                //添加到整个dtm中
                dtm.addRow(rowData);
            }
        });
        c.add(jpl,BorderLayout.SOUTH);
        setVisible(true);
    }

    public static void main(String[] args) {
        new JTableDemo();
    }
}
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值