Swing使用JTable表格组件

97 篇文章 16 订阅

表格是最常用的数据统计形式之一,在Swing中由JTabel类实现表格。

示例:使用JTable表格组件,动态绑定数据。如下图:

(1)创建JTable表格组件。

// 表头(列名)
Vector<String> columnNames = new Vector<String>();
columnNames.add("编号");
columnNames.add("姓名");
columnNames.add("性别");
columnNames.add("创建时间");
// 创建表格模型
DefaultTableModel dataModel = new DefaultTableModel(columnNames, 0);
// 创建JTable表格组件
JTable table = new JTable(dataModel);
// 创建带滚动条的面板,并将表格添加到带滚动条的面板中
JScrollPane scorllPane = new JScrollPane(table);
// 将表头添加到面板中(布局的上方)
tableBoxPanel.add(table.getTableHeader(), BorderLayout.NORTH);
// 将带滚动条的面板添加到布局中(布局的中间)
tableBoxPanel.add(scorllPane, BorderLayout.CENTER);

(2)点击“绑定数据”按钮,实现动态绑定数据。

// 加载数据按钮事件
btnLoadData.addActionListener(new ActionListener()
{
	public void actionPerformed(ActionEvent e)
	{
		// 数据列表
		Vector<Vector<Object>> rowData = new Vector<Vector<Object>>();
		for (int i = 1; i <= 20; i++)
		{
			Vector<Object> rowItem = new Vector<Object>();
			rowItem.add(i);
			rowItem.add("用户" + i);
			rowItem.add(i % 2 == 1 ? "男" : "女");
			rowItem.add(new java.util.Date());
			rowData.add(rowItem);
		}

		// 绑定结果
		dataModel.setDataVector(rowData, columnNames);

		// 显示总数据
		lblTotalCount.setText(String.valueOf(rowData.size()));
	}
});

(3)完整代码:

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.BoxLayout;
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.table.DefaultTableModel;

/**
 * Swing使用JTable表格组件
 * 
 * @author pan_junbiao
 *
 */
public class TableFrame
{
	private JFrame frame;

	public static void main(String[] args)
	{
		EventQueue.invokeLater(new Runnable() {
			public void run()
			{
				try
				{
					TableFrame window = new TableFrame();
					window.frame.setVisible(true);
				} catch (Exception e)
				{
					e.printStackTrace();
				}
			}
		});
	}

	public TableFrame()
	{
		initialize();
	}

	private void initialize()
	{
		// 初始化窗体
		frame = new JFrame();
		frame.setTitle("使用表格绑定数据");
		frame.setBounds(100, 100, 450, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null); // 窗体居中

		// 查询面板(头部面板)
		JPanel searchBoxPanel = new JPanel();
		frame.getContentPane().add(searchBoxPanel, BorderLayout.NORTH);
		JButton btnLoadData = new JButton("绑定数据");
		btnLoadData.setFont(new Font("宋体", Font.PLAIN, 14));
		searchBoxPanel.add(btnLoadData);

		// 数据面板(中间面板)
		JPanel tableBoxPanel = new JPanel();
		tableBoxPanel.setLayout(new BorderLayout(0, 0));
		frame.getContentPane().add(tableBoxPanel, BorderLayout.CENTER);

		// 底部面板
		JPanel footBoxPanel = new JPanel();
		frame.getContentPane().add(footBoxPanel, BorderLayout.SOUTH);
		footBoxPanel.setLayout(new BoxLayout(footBoxPanel, BoxLayout.X_AXIS));
		JLabel label = new JLabel(" 总数据:");
		label.setFont(new Font("宋体", Font.PLAIN, 14));
		footBoxPanel.add(label);
		JLabel lblTotalCount = new JLabel("0");
		lblTotalCount.setFont(new Font("宋体", Font.PLAIN, 14));
		footBoxPanel.add(lblTotalCount);

		// 表头(列名)
		Vector<String> columnNames = new Vector<String>();
		columnNames.add("编号");
		columnNames.add("姓名");
		columnNames.add("性别");
		columnNames.add("创建时间");
		// 创建表格模型
		DefaultTableModel dataModel = new DefaultTableModel(columnNames, 0);
		// 创建JTable表格组件
		JTable table = new JTable(dataModel);
		// 创建带滚动条的面板,并将表格添加到带滚动条的面板中
		JScrollPane scorllPane = new JScrollPane(table);
		// 将表头添加到面板中(布局的上方)
		tableBoxPanel.add(table.getTableHeader(), BorderLayout.NORTH);
		// 将带滚动条的面板添加到布局中(布局的中间)
		tableBoxPanel.add(scorllPane, BorderLayout.CENTER);

		// 加载数据按钮事件
		btnLoadData.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e)
			{
				// 数据列表
				Vector<Vector<Object>> rowData = new Vector<Vector<Object>>();
				for (int i = 1; i <= 20; i++)
				{
					Vector<Object> rowItem = new Vector<Object>();
					rowItem.add(i);
					rowItem.add("用户" + i);
					rowItem.add(i % 2 == 1 ? "男" : "女");
					rowItem.add(new java.util.Date());
					rowData.add(rowItem);
				}

				// 绑定结果
				dataModel.setDataVector(rowData, columnNames);

				// 显示总数据
				lblTotalCount.setText(String.valueOf(rowData.size()));
			}
		});
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

pan_junbiao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值