首页 > 编程笔记 > Java笔记 阅读:5

Java Swing JTable表格的用法(附带实例)

Swing 表格由 JTable 对象表示,其作用是把数据以表格的形式显示给用户。本节将对 Swing 表格组件进行讲解。

创建表格

JTable 类除提供了默认的构造方法外,还提供了用于显示二维数组中的元素的构造方法,这个构造方法的语法如下:
JTable(Object[][] rowData, Object[] 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个抽象方法没有实现:
为了实现使用表格模型创建表格的功能,Swing 提供了表格模型类,即 DefaultTableModel 类。DefaultTableModel 类继承了 AbstractTableModel 抽象类且实现了上述 3 个抽象方法。

DefaultTableModel 类提供的常用构造方法如下表所示:

表: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 降序排列

相关文章