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单选按钮的用法(附带实例)