Java Swing JTable表格的用法(附带实例)
Swing 表格由 JTable 对象表示,其作用是把数据以表格的形式显示给用户。本节将对 Swing 表格组件进行讲解。
在使用表格时,要先把表格添加到滚动面板中,再把滚动面板添加到窗体的相应位置处。
【实例】创建带滚动条的表格。利用构造方法 JTable(Object[][] rowData, Object[] columnNames) 创建一个具有滚动条的表格。

图 1 滚动条未出现时的表格
当窗体的高度变小时,将出现滚动条,效果图如下图所示:

图 2 滚动条出现时的表格
为了实现使用表格模型创建表格的功能,Swing 提供了表格模型类,即 DefaultTableModel 类。DefaultTableModel 类继承了 AbstractTableModel 抽象类且实现了上述 3 个抽象方法。
DefaultTableModel 类提供的常用构造方法如下表所示:
表格模型被创建后,使用 JTable 类的构造方法 JTable(TableModel dm) 即可创建表格。表格被创建后,还可以使用 setRowSorter() 方法为表格设置排序器:当单击表格的某一列的列头时,在这一列的列名后将出现 ▲ 标记,说明将按升序排列表格中的所有行;当再次单击这一列的列头时,标记将变为 ▼,说明按降序排列表格中的所有行。
【实例】表格自动排序。利用表格模型创建表格,并对表格使用表格排序器。

图 3 运行效果
单击名称为 B 的列头后,将得到如下图所示的效果,此时 B 列的数据按升序排列:

图 4 升序排列
再次单击名称为 B 的列头后,将得到如下图所示的效果,此时 B 列的数据按降序排列:

图 5 降序排列
创建表格
JTable 类除提供了默认的构造方法外,还提供了用于显示二维数组中的元素的构造方法,这个构造方法的语法如下:JTable(Object[][] rowData, Object[] columnNames)
- rowData:存储表格数据的二维数组;
- columnNames:存储表格列名的一维数组。
在使用表格时,要先把表格添加到滚动面板中,再把滚动面板添加到窗体的相应位置处。
【实例】创建带滚动条的表格。利用构造方法 JTable(Object[][] rowData, Object[] columnNames) 创建一个具有滚动条的表格。
import java.awt.*; // 导入 AWT 包
import javax.swing.*; // 导入 Swing 包
public class JTableDemo extends JFrame {
public static void main(String args[]) {
JTableDemo frame = new JTableDemo(); // 创建窗口对象
frame.setVisible(true); // 设置窗口可见
}
public JTableDemo() {
setTitle("创建可以滚动的表格"); // 设置窗口标题
setBounds(100, 100, 240, 150); // 设置窗口位置和大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置关闭操作
String[] columnNames = {"A", "B"}; // 定义表格列名数组
// 定义表格数据数组
String[][] tableValues = {
{"A1", "B1"},
{"A2", "B2"},
{"A3", "B3"},
{"A4", "B4"},
{"A5", "B5"}
};
// 创建指定列名和数据的表格
JTable table = new JTable(tableValues, columnNames);
// 创建显示表格的滚动面板
JScrollPane scrollPane = new JScrollPane(table);
// 将滚动面板添加到边界布局的中间
getContentPane().add(scrollPane, BorderLayout.CENTER);
}
}
运行结果如下图所示:
图 1 滚动条未出现时的表格
当窗体的高度变小时,将出现滚动条,效果图如下图所示:

图 2 滚动条出现时的表格
DefaultTableModel表格数据模型
Swing使用TableModel接口定义了一个表格模型,AbstractTableModel抽象类实现了TableModel接口的大部分方法,只有以下3个抽象方法没有实现:- public int getRowCount();
- public int getColumnCount();
- public Object getValueAt(int rowIndex, int columnIndex);
为了实现使用表格模型创建表格的功能,Swing 提供了表格模型类,即 DefaultTableModel 类。DefaultTableModel 类继承了 AbstractTableModel 抽象类且实现了上述 3 个抽象方法。
DefaultTableModel 类提供的常用构造方法如下表所示:
| 构造方法 | 说明 |
|---|---|
| DefaultTableModel() | 创建一个 0 行 0 列的表格模型 |
| DefaultTableModel(int rowCount, int columnCount) | 创建一个 rowCount 行 columnCount 列的表格模型 |
| DefaultTableModel(Object[][] data, Object[] columnNames) | 按照数组中指定的数据和列名创建一个表格模型 |
| DefaultTableModel(Vector data, Vector columnNames) | 按照向量中指定的数据和列名创建一个表格模型 |
表格模型被创建后,使用 JTable 类的构造方法 JTable(TableModel dm) 即可创建表格。表格被创建后,还可以使用 setRowSorter() 方法为表格设置排序器:当单击表格的某一列的列头时,在这一列的列名后将出现 ▲ 标记,说明将按升序排列表格中的所有行;当再次单击这一列的列头时,标记将变为 ▼,说明按降序排列表格中的所有行。
【实例】表格自动排序。利用表格模型创建表格,并对表格使用表格排序器。
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class SortingTable extends JFrame {
private static final long serialVersionUID = 1L;
public static void main(String args[]) {
SortingTable frame = new SortingTable();
frame.setVisible(true);
}
public SortingTable() {
setTitle("表格模型与表格");
setBounds(100, 100, 240, 150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane scrollPane = new JScrollPane();
getContentPane().add(scrollPane, BorderLayout.CENTER);
String[] columnNames = {"A", "B"}; // 定义表格列名数组
String[][] tableValues = {{"A1", "B1"}, {"A2", "B2"}, {"A3", "B3"}}; // 定义表格数据数组
// 创建指定表格列名和表格数据的表格模型
DefaultTableModel tableModel = new DefaultTableModel(tableValues, columnNames);
JTable table = new JTable(tableModel); // 创建指定表格模型的表格
table.setRowSorter(new TableRowSorter<>(tableModel));
scrollPane.setViewportView(table);
}
}
运行结果如下图所示:
图 3 运行效果
单击名称为 B 的列头后,将得到如下图所示的效果,此时 B 列的数据按升序排列:

图 4 升序排列
再次单击名称为 B 的列头后,将得到如下图所示的效果,此时 B 列的数据按降序排列:

图 5 降序排列
相关文章
- Java Swing.JFrame的用法(附带实例)
- Java Swing JDialog对话框的用法(附带实例)
- Java Swing JOptionPane对话框用法详解(附带实例)
- Java Swing FlowLayout布局管理器的用法(附带实例)
- Java Swing BorderLayout布局管理器的用法(附带实例)
- Java Swing JPanel和JScrollPane面板的用法(附带实例)
- Java Swing JLabel标签的用法(附带实例)
- Java Swing ImageIcon图标类的用法(附带实例)
- Java Swing JButton按钮的用法(附带实例)
- Java Swing JRadioButton单选按钮的用法(附带实例)
ICP备案:
公安联网备案: