JTableHeader的单个表头最复杂的操作也就是Renderer渲染和Editor编辑,然后增加事件处理和悬浮框提示,最多再加点特殊显示效果,这和JTable单元格的操作相同,在前面的例子里都已经讲过了,这里就剩下最后一个也是关于JTableHeader表头的操作了, 表头单元格的合并和拆分.
JTableHeader的单个表头可编辑时可以把它看做一个JTextField,不可操作时可以看做一个JLabel,对于表头的合并和拆分操作来说就是把JLabel或JTextField进行合并和拆分的过程.JTable表头的合并简单来说就是把你选定的要合并的表头的边线擦掉,然后调整宽度和高度,再在这几个合并的表头外围画一个新的边线,然后设置JTableHeader的UI,刷新就可以了,和JTable的单元格基本相同,唯一的区别就是JTableHeader的表头不像单元格那个容易得到和处理,我们需要定义数据结构来存储它.
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumnModel;
import com.swing.lx.table.ColumnGroup;
import com.swing.lx.table.GroupableTableHeader;
import com.swing.lx.table.GroupableTableHeaderUI;
public class TableDemo extends JFrame{
String[] header = new String[] {"name", "age", "country", "home", "telephone"};
String[][] content = new String[][]{{"name1","18","China", "shangHai", "111"},
{"name1","18","China", "shangHai", "111"}};
public TableDemo() {
super("test");
setSize(500, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultTableModel dm = new DefaultTableModel(content, header);
JTable table = new JTable(dm) {
@Override
protected JTableHeader createDefaultTableHeader() {
return new GroupableTableHeader(columnModel);
// return null;
}
};
TableColumnModel cm = table.getColumnModel();
ColumnGroup g_name = new ColumnGroup("Source");
g_name.add(cm.getColumn(0));
g_name.add(cm.getColumn(1));
g_name.add(cm.getColumn(2));
ColumnGroup g_name2 = new ColumnGroup("Target");
g_name2.add(cm.getColumn(3));
g_name2.add(cm.getColumn(4));
GroupableTableHeader header = (GroupableTableHeader) table.getTableHeader();
header.addColumnGroup(g_name);
header.addColumnGroup(g_name2);
table.getTableHeader().setUI(new GroupableTableHeaderUI());
JScrollPane panel = new JScrollPane(table);
getContentPane().add(panel, BorderLayout.CENTER);
}
public static void main(String[] args) {
TableDemo demo = new TableDemo();
demo.setVisible(true);
}
}
分享到:
相关推荐
而"JTable表头合并"是Swing中的一个高级特性,允许开发者创建具有复杂结构的表头,以更好地呈现和组织数据。这种功能特别适用于那些需要将相关列分组或分类的情况。 表头合并是通过`DefaultTableColumnModel`的`...
在这种情况下,可以将这些列的表头合并为一个“客户”类别,提高表格的可读性和理解性。 在提供的文件中,我们可以看到以下几个关键类: 1. **GroupableTableHeaderUI**: 这是JTable表头的自定义UI实现,负责渲染...
跨行列表体通常涉及到单元格合并,这在`JTable`中可以通过重写`AbstractTableModel`类的`getColumnCount()`、`getRowCount()`、`getValueAt()`等方法来实现。当某些行需要合并时,`getColumnCount()`返回的列数应该...
当我们需要创建具有复杂结构的表头,比如多级或合并的表头时,这通常涉及到自定义`JTableHeader`和使用`DefaultTableCellRenderer`。NetBeans IDE提供了便捷的方式来帮助开发者实现这些功能。本篇文章将详细介绍如何...
在Swing中,表头由JTableHeader类表示,我们可以创建一个继承自DefaultTableHeaderCellRenderer的自定义渲染器来实现表头合并。表头合并通常涉及到两个主要步骤:绘制合并的单元格和调整列宽以适应合并后的表头。 1...
`JTable`实例大全提供了各种实用示例,涵盖了`JTable`的高级功能,如合并表头和合并表格,这些功能在开发复杂的桌面应用程序时尤为关键。 1. **JTable基本用法**: `JTable`是基于`AbstractTableModel`的数据模型...
4. **表头合并**:通过`RowHeaderRenderer`可以实现多列合并的表头效果。 5. **数据验证**:在编辑时添加数据验证,确保输入的数据符合特定格式或规则。 6. **表格工具栏**:可以添加工具栏来控制表格的操作,如...
本资料集合了25个已经调试通过的`JTable`例子,涵盖了多种高级特性和用法,如多级表头、多级行头以及单元格合并等,旨在帮助开发者深入理解和应用`JTable`。 1. **多级表头(Nested Table Headers)**: 多级表头...
"Groupable TableHeader"可能是指一种扩展了标准JTable表头的自定义实现,允许用户以分组的形式来查看或操作数据,这对于数据的分类和组织非常有用。 在Java中,实现这样的功能通常涉及到对JTable和JTableHeader类...
《JTable实现多表头与单元格合并技术详解》 在Java Swing开发中,JTable是一种常用的组件,用于展示二维数据。在某些情况下,我们可能需要对表格进行更复杂的布局,比如合并行或列,以达到类似Excel中的多表头效果...
在实际应用中,有时我们需要对`JTable`的单元格进行合并,这通常是出于美化界面或组织数据的需要。描述中提到的"实用的Swing实例"很可能是针对`JTable`单元格合并的一种实现方式。 要实现`JTable`的单元格合并,你...
实例045 用数组设置JTable表格的列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 ...