Java Swing 中 JTable 与 JTree 组件核心用法详解
在 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 开发的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













