引言
在一个免费的ERP系统的开发过程中,存在这样的需求,需要用JTable的方式定义一个报表模板,
这个模板要能够支持公式,在后台的业务出来中,会根据公式算出实际的值,然后在添回模板中,变成报表。如下图,就是一张负责资产表的报表模板:
而最终生成的数据如下:
在图一,我们可以看到17行是公式是:C3+C4(当然也可以用SUM (C3:C4)
).也就是说,我们的公式需要支持引用其他的单元格。那么在实际的做这个模板的过程中,对于要引用的单元格的行列号,都要能够一目了然;否则,总不至于让人一个一个的去数吧,效率低不说,还很容易出错。至于列号,JTable
本来就有Column Header,自不必多说。现在的关键就是如何实现JTable
的Row Header。如何实现Row Header
呢?那就是用JScrollPane。
JScrollPane介绍:
相信用过JTable和JScrollPane的人都会知道。如果我们把JTable
加到一个JScrollPane中,JTable就会自然后表头(你这不是废话吗?),但是如果我们加大其他的容器中,你就会发现那个表头不见了,比如你想要在一个JPanel
中添加,就只能这样了:
JTable table = new JTable();
JPanel tablePane = new JPanel(new BorderLayout());
tablePane.add(table.getTableHeader(),BorderLayout.NORTH);
tablePane.add(table,BorderLayout.CENTER);
由此,我们可以看出,通过JScrollPane可以自动为JTable
加上列标题。那么他是怎么实现的呢?
先来看看JScrollPane的结构:
可知,JScrollPane具有Column Header
和Row Header的区域,可以通过setColumnHeaderView(Component view)
和setRowHeaderView(Component view)分别为它们添加相应的外观组件。JScrollPane
在添加JTable的时候,会自动setColumnHeaderView(table.getTableHeader()).
想要添加JTable
的Row Header,只需要把一个组件添加到Row Header
区域。那么该用什么样的组件呢? 可以选择JList,也可以用只有一列的JTable.
添加Row Header
首先创建一个只有一列的JTable:
JTable rowHeaderTable =
new JTable (){
public Component prepareRenderer(TableCellRenderer renderer,
int row,
int col) {
Component component =
super.prepareRenderer(renderer, row, col);
((JLabel)component).setHorizontalAlignment(JLabel.CENTER);
((JLabel)component).setBackground(table.getTableHeader().getBackground());
((JLabel)component).setBorder(UIManager.getBorder("TableHeader.cellBorder"));
((JLabel)component).setText((row +1)+"");
return component;
}
通过prepareRenderer把表格单元的样式设置与column header一样的样式。
然后把这个table加到JScrollPane
的Row Header
区域:
scroll.setRowHeader(rowHeaderTable);
分享到:
相关推荐
在标题和描述中提到的“JTable 拖动行 移动行的ui”,正是指为`JTable`添加了拖放功能的用户界面。 要实现这个功能,通常我们需要自定义`JTable`的UI,或者使用已经存在的第三方库。在描述中提到了`table.setUI(new...
标题和描述提到的`DragDropRowTableUI`是`JTable`的一种自定义用户界面(UI)实现,它扩展了`javax.swing.plaf.basic.BasicTableUI`,增加了拖放功能,使得用户可以直接通过鼠标拖动来移动`JTable`的行。 要实现`...
`JTable`由行和列组成,而表头(`JTableHeader`)则对应于列标题。默认情况下,`JTableHeader`中的每个单元格都显示一个列的标题,但我们可以通过自定义渲染器来改变这个行为。 1. **自定义表头渲染器**: 要创建...
通常,将`JTable`置于`JScrollPane`内可自动处理行标题的显示问题,但如果直接将`JTable`添加到容器中,则需显式添加`getTableHeader()`到容器的北端(`BorderLayout.NORTH`)。 #### 结论 `JTable`是Swing中功能...
开发者可以根据需要自定义`TableModel`来适应不同的数据结构,或者通过监听`JTable`的各种事件来实现特定的功能,如单元格更改、行选择等。`JTable`是Java Swing中非常重要的组件,广泛应用于数据展示和用户交互场景...
标题"支持ResultSet的JTable"暗示我们将探讨如何将`ResultSet`对象的数据绑定到`JTable`,以便在GUI中实时显示查询结果。通常,这个过程涉及到以下步骤: 1. **数据库连接**:首先,我们需要使用`DriverManager.get...
此外,`JTable`还支持各种事件监听,如单元格点击、单元格更改等,这可以通过实现`CellListener`接口或者添加`MouseListener`来实现。你还可以自定义单元格渲染器和编辑器,以实现特定的数据显示和编辑行为。 在`...
可以通过调用`JTable.getTableHeader()`方法获取行标题。在上述示例中,`JTable`被放置在`JScrollPane`中,这样可以确保`ColumnHeader`与`ColumnObject`都完整地显示出来。 如果直接将`JTable`添加到`JFrame`中而...
"复杂JTable-跨列表头"是一个特殊实现,它扩展了JTable的功能,允许在表头中进行列的合并,这在显示层次结构或分组数据时特别有用。 跨列表头(或合并列头)的概念是将多个列的标题合并为一个大的表头单元格,通常...
`JTable`提供了表格布局,可以动态地添加、删除行和列,支持数据排序和过滤。它依赖于`TableModel`接口,通过这个接口,你可以提供自己的数据源,定制数据展示和交互方式。 ### 二、创建JTable 创建`JTable`通常...
jTable 支持许多高级特性,如自定义列显示、本地化、列过滤、行选择、行操作、列排序等。这些特性可以通过配置选项来启用或定制,以满足特定项目需求。 **5. jTable 和 ASP.NET MVC 的整合优势** - **简洁的API**:...
3. **配置 jtable**:使用 JavaScript 配置 jtable 的各种参数,如字段名、标题、操作等。 4. **初始化 jtable**:调用 `$("#yourTableContainer").jtable()` 初始化表格,并传入之前配置的对象。 5. **服务器端交互...
通过以上步骤,我们可以实现从Excel文件中读取数据,并将它们复制到JTable中,同时还能支持JTable的行列增删功能。在实际开发中,可能还需要处理异常、错误处理和用户体验优化等问题,确保程序的稳定性和易用性。
描述中的链接指向了一篇博客文章,虽然具体内容未给出,但根据标题和标签,我们可以推测这篇文章可能涉及了JTable的源码分析和实用工具。源码分析可能涵盖了JTable的内部工作原理,如何通过调用其API来定制表格行为...
在`tabletest1`这个文件中,可能包含了实现上述步骤的代码,以及可能的额外功能,如监听表格事件(例如行选择、单元格编辑等)或者自定义单元格渲染。`JTable`还支持许多高级特性,如排序、过滤、表格列的动态调整等...
- `getTableHeader()`:返回表格的行标题组件,用于获取或设置列头。 - 当不使用`JScrollPane`时,若想在`JFrame`中显示Column Header,需要手动添加`table.getTableHeader()`到布局管理器。 在实际应用中,`JTable...
在Java编程环境中,`JTable`是Swing库中...这个过程涉及到创建`Workbook`和`Sheet`对象,遍历`JTable`的列和行,以及将数据写入Excel单元格。这个功能对于需要将用户界面中的数据导出为可编辑或打印的格式非常有用。
例如,为了创建一个标题行或列,或者在某些情况下合并具有相同数据的单元格以减少重复,合并单元格就显得尤为重要。以下是对`JTable`合并单元格的详细解释。 首先,`JTable`本身并不直接支持单元格的合并功能。要...
JTable还支持拖放操作,可以通过实现`TransferHandler`类来实现数据的拖放导入导出。同时,JTable还可以与数据库连接,动态加载和保存数据,提供强大的数据交互功能。 总的来说,Java的JTable组件是一个功能丰富的...
本文将详细介绍如何利用 `JTable` 的各种特性来实现更丰富的表格展示效果。 #### 二、构建基本的JTable 首先,创建一个 `JTable` 需要两个主要部分:列标题数组和数据对象数组。例如,以下代码展示了如何构建一个...