表格是最常用的数据统计形式之一,在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()));
}
});
}
}