Java Swing 中 JTable 与 JTree 组件核心用法详解

不晚
不晚
发布时间:2026-10-14 | 2人浏览过
原创

在 Java GUI 开发中,JTable 用于高效展示二维数据表,而 JTree 则适用于呈现具有层级关系的数据结构。本文将分别介绍这两个组件的基础概念、常用构造函数及其在实际场景中的代码实现,涵盖数据绑定、UI 样式调整及节点管理。

JTable 表格组件使用方法

JTable 是 Swing 库中用于以表格形式显示数据的组件,特别适合处理大规模数据集。其核心在于数据模型(TableModel)的分离与管理。

第1步:理解 JTable 常用构造方法

创建表格实例时,开发者通常需要通过指定列名和数据来初始化,或者直接使用自定义的数据模型:

  • JTable():使用系统默认模型创建空表格。
  • JTable(int numRows, int numColumns):创建指定行列数且使用默认模型的表格。
  • JTable(Object[][] rowData, Object[] columnNames):最常用,直接传入二维数组和列名数组创建表格。
  • JTable(TableModel dm):传入自定义数据模型对象,适合复杂逻辑或动态数据源。

第2步:实现基础表格与排序功能

以下代码演示了如何创建一个包含预设数据的表格,并启用点击表头进行排序的功能。为了实现滚动查看大量数据,需要将表格放置在 JScrollPane 容器中。

public class JTableDemo1 extends JFrame {
    JTable table;
    JScrollPane scrollPane;
    DefaultTableModel tableModel;

    public JTableDemo1() {
        super();
        setTitle("表格模型与表格");

        // 定义列名和数据
        String[] columnNames = { "A", "B", "C" };
        String[][] tableValues = { 
            { "A1", "B1", "C1" }, { "A2", "B2", "C2" },
            { "A3", "B3", "C3" }, { "A4", "B4", "C4" }
        };

        // 1. 创建数据模型
        tableModel = new DefaultTableModel(tableValues, columnNames);
        // 2. 基于模型创建表格
        table = new JTable(tableModel);

        // 3. 启用行排序功能,支持点击列头排序和过滤
        table.setRowSorter(new TableRowSorter<DefaultTableModel>(tableModel));

        // 4. 将表格放入滚动面板
        scrollPane = new JScrollPane();
        scrollPane.setViewportView(table);
        getContentPane().add(scrollPane, BorderLayout.CENTER);

        setBounds(300, 200, 400, 300);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String args[]) {
        new JTableDemo1();
    }
}

运行效果如下所示,用户可以拖动滚动条查看更多数据,或通过点击列标题对数据进行升降序排列:

第3步:深度定制 JTable 外观与行为

在更复杂的场景中,可能需要调整行高、网格线颜色、选中状态背景色等视觉属性,或者设置默认的选中行范围。以下代码展示了多种样式的配置:

// ... 前面初始化 rowData 和 columnNames ...
jtable3 = new JTable(rowData, columnNames);

// 设置首选视口大小
jtable3.setPreferredScrollableViewportSize(new Dimension(600, 100));
// 设置默认行高度为30
jtable3.setRowHeight(30);
// 单独设置第1行高度为20
jtable3.setRowHeight(0, 20);
// 设置相邻行间距
jtable3.setRowMargin(5);

// 启用行选择
jtable3.setRowSelectionAllowed(true);
// 设置选中行的前景/背景色
jtable3.setSelectionForeground(Color.red);
jtable3.setSelectionBackground(Color.white);
// 设置网格线颜色
jtable3.setGridColor(Color.red);

// 初始选择特定行(例如1到3行),随后取消选择以便演示
jtable3.setRowSelectionInterval(0, 2);
jtable3.clearSelection();

// 控制网格线和拖拽显示
jtable3.setShowGrid(true);
jtable3.setShowHorizontalLines(true);
jtable3.setShowVerticalLines(true);
jtable3.setDragEnabled(false);

// 动态修改单元格值
jtable3.setValueAt("Update", 0, 0);

将多个不同配置的表格容器放入同一界面,可以直观对比各种样式参数带来的视觉效果:

JTree 树形组件使用方法

JTree 用于以轮廓视图的形式显示分层数据集合(如文件系统目录)。它依赖于树节点(TreeNode)和树模型(TreeModel)来管理数据结构。

第4步:了解 JTree 的核心构造器

根据不同的需求,可以使用以下几种主要构造方式来初始化 JTree:

  • JTree():创建带有示例节点的默认树。
  • JTree(Object[] value):根据提供的对象数组创建子节点,所有元素作为新根节点的子节点。
  • JTree(TreeNode root):以指定的节点为根创建树。若节点为空,则显示空树。
  • JTree(TreeModel model):使用自定义数据模型构建树,灵活性最高。

第5步:动态构建多层级节点结构

在真实的业务应用中,通常使用 DefaultMutableTreeNode 类手动构建父子关系。关键要点包括:设置节点是否允许添加子节点(true 表示可展开添加)、递归添加子节点以及正确挂载到 JTree 上。

public class JTreeDemo2 {
    public static void createComplexTree(JPanel panel) {
        // 构建生物学分类树结构
        DefaultMutableTreeNode biology = new DefaultMutableTreeNode("Biology");
        DefaultMutableTreeNode animal = new DefaultMutableTreeNode("Animal");
        DefaultMutableTreeNode mammal = new DefaultMutableTreeNode("Mammal");
        DefaultMutableTreeNode horse = new DefaultMutableTreeNode("Horse");

        // 组装层级关系
        mammal.add(horse);
        animal.add(mammal);
        biology.add(animal);

        // 将根节点绑定到 Tree
        JTree jTree6 = new JTree(biology);
        panel.add(new JScrollPane(jTree6));

        // 构建自定义 Model 的树
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root1");
        DefaultMutableTreeNode child1 = new DefaultMutableTreeNode("Child1");
        DefaultMutableTreeNode child11 = new DefaultMutableTreeNode("Child11");
        DefaultMutableTreeNode child111 = new DefaultMutableTreeNode("Child111");

        root.add(child1);
        child1.add(child11);
        child11.add(child111);

        DefaultTreeModel model = new DefaultTreeModel(root);
        JTree jTree7 = new JTree(model);
        panel.add(new JScrollPane(jTree7));
    }
}

此外,可以通过客户端属性(Client Property)改变树的连线样式,例如将连线设置为“Angled”(斜线连接)而非传统的垂直水平连接线:

jTree1.putClientProperty("JTree.lineStyle", "Angled");

以下截图展示了默认树、字符串数组初始化的树、以及包含多级嵌套内容的树在不同布局下的表现:

组合多个不同配置效果的树组件,可以更清晰地观察节点展开、图标显示以及背景色的差异:

简要总结

JTable 的优势在于结合 TableModel 实现了数据与视图的解耦,非常适合报表展示;而 JTree 则通过灵活的节点操作支持任意深度的层级导航。在实际开发中,务必注意将两者均包裹在 JScrollPane 中以提供良好的用户体验。以上就是 Java Swing 中 JTable 和 JTree 组件使用的详细内容,更多关于 Java GUI 开发的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表