Ext.ProgressColumn
(在线demo
效果见下图)是Web用户界面组件包ExtJS
的一个用户扩展。本文中使用Swing组件包中JTable对ProgressColumn的特性进行了模拟,从而使其可以运行在Java平台上。并结合实例演示了如何自定义绘制器、编辑器和比较器。
环境准备
运行demo
- 从附件中下载jtable_with_progresscolumn.zip到本地并解压。
- NetBeans主菜单依次选择“文件”——“打开项目”。
- 在弹出的“打开项目”对话框中选择刚才解压之后的jtable_with_progresscolumn目录,点击“打开项目”按钮。
- 在“项目”视图中找到jtable_with_progresscolumn项目,在上下文菜单中点击“运行”。
- 点一下“Growth”列的表头,正序排列;再点一下,逆序排列。
- 双击“Growth”列第1行的单元格。最终结果如图所示:
ProgressColumn的特性列表
- ProgressColumn的单元格,以一个进度条来直观的表现0到100的整数值。当取值在0-33时为红色、34-66时为黄色、67-100时为绿色。
- 单击ProgressColumn列的表头,可以对该列按正序、逆序排列。
- 双击ProgressColumn列的单元格,在自定义编辑器中输入一个整数值来改变对应进度条的刻度。
自定义绘制器
绘制器的现代UI技术中常用的概念,很多优秀的组件库(比如ExtJS和Swing)对其都有很好的实现。什么是绘制器呢?对于JList、JTable、JTree这样的复杂组件,其单元的绘制是交给另一个对象来完成的,这个对象叫做绘制器。
回到JTable的自定义绘制器问题上来,它被定义为一个叫做TableCellRenderer的接口,这个接口只有定义了一个方法:
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
各位看官可能要说了,这也忒麻烦了。还好,Swing以DefaultTableCellRenderer类的方式提供了一个缺省的绘制器,它扩展JLabel并实现了TableCellRenderer接口。
具体到我们上面这张图来说,“Common
Name”这一列在Model中是String类型(准确地说是Object),在界面中绘制为一个JLabel来显示字符串(Object的toString方法);"Indoor?"这一列在Model中是Boolean类型,它不用DefaultTableCellRenderer,而是调用一个继承自JCheckbox的专用绘制器类。
“Growth”这一列需要自定义绘制器:一是Model中该列对应的是我们自定义的Progress类型,缺省绘制器不认识它。二是需要重写paint方法来重绘JLabel(恩,这个进度条是用2D API画的)。
如果我们对某一列使用ProgressColumn的话,首先把该列指定为Progress类型,然后用以下代码给Progress类型绑定我们自定义的绘制器ProgressRenderer。
table.setDefaultRenderer(Progress.class, new ProgressRenderer());
自定义编辑器
编辑器是与绘制器紧密相关的一个概念,而且复杂度要高很多。别担心,我不会大讲特讲编辑器的概念(困了),因为这个demo里使用的只是最简单的自定义编辑器(看ProgressEditor行数就知道了)。
为什么这么少?你猜对了,JTable也有一个缺省编辑器,不过它的名字不是DefaultTableCellEditor,而是DefaultCellEditor(因为JTree也用它)。我们就是在它的基础上做一些小扩展:一是加上红色边框;二是由于我们自定义了Progress类型,将原来的值设置到JTextField中就需要做一点小处理。代码如下:
jtf.setText((value != null) ? value.toString() : ""); // 将原来的值设置到JTextField中
jtf.setBorder(new LineBorder(Color.RED, 2)); // 设置红色边框
然后用以下代码给Progress类型绑定自定义的编辑器ProgressEditor。
table.setDefaultEditor(Progress.class, new ProgressEditor(new JTextField()));
自定义比较器
由于JDK 6.0之前JTable是没有列排序API的,所以也谈不到比较器的问题。不过现在既然可以排序了,那么我们要对自定义的Progress给出一个比较器,也就是实现java.util.Comparator接口。然后给Progress类型绑定自定义的比较器ProgressComparator。
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(table.getModel());
sorter.setComparator(5, new ProgressComparator());
table.setRowSorter(sorter);
- 大小: 33.8 KB
- 大小: 32.7 KB
分享到:
相关推荐
### Java Swing JTable 分页实现详解 #### 一、引言 在开发基于Java Swing的应用程序时,我们经常需要处理大量的数据展示问题。对于表格形式的数据展示,`JTable`是一个非常常用且强大的组件。然而,当数据量过大时...
JTable 的展示方式可以通过设置表格的宽度和高度、显示表头、添加列、设置列的编辑器等方式进行美化。例如,可以设置表格的宽度和高度,以适应不同的屏幕分辨率。 JTable 事件响应 JTable 支持事件响应,可以监听...
本教程将深入探讨如何在Java Swing应用中使用`JTable`和`JTree`。 `JTable`是Java Swing中的一个组件,它允许我们展示二维的数据,通常以行和列的形式,非常适合处理表格数据。`JTable`可以动态地调整大小,用户...
Java Swing中的JTable组件是用于显示和编辑数据的表格控件。它是Swing中最复杂和强大的组件之一,具有许多高级功能和灵活的配置选项。下面将详细介绍JTable的用法和相关知识点。 1. JTable与TableModel JTable组件...
此外,Swing提供了一些高级组件,如JTable用于显示和编辑表格数据,JTree用于展示层次结构的数据,以及JTabbedPane用于创建带有多个面板的选项卡界面。 在"Java.Swing图形界面开发与案例详解.王鹏等——第5章"中,...
【标题】"javax.swing实现分页" 在Java编程中,`javax.swing` 是一个用于创建图形用户界面(GUI)的包,它包含了丰富的组件和工具类,使得开发者能够构建出功能丰富的桌面应用。分页是一种常见于数据量较大的场景中...
在Java的Swing库中,`JTable`是用于创建数据网格视图的重要组件,它允许用户以表格的形式查看和操作数据。而`JButton`则是一个常用的按钮控件,通常用于触发某些动作或事件。将`JButton`添加到`JTable`中可以为用户...
Java Swing 实现 JTable 检测单元格数据变更事件的方法示例 Java Swing 中的 JTable 是一个功能强大且灵活的表格组件,广泛应用于各种桌面应用程序中。然而,在实际开发中,我们经常需要检测单元格数据的变更事件...
Swing JTable组件设置单元格合并,内置Test测试类,核心API GridBagTable tasktable = new GridBagTable(model); tasktable.mergeCells(startRow, endRow, 0, 0);
在Java Swing中,`JTable`和`JTree`是两个重要的组件,它们分别用于展示数据的表格形式和树形结构。下面将详细介绍这两个组件的基本概念、常用方法以及实例。 ### `JTable`组件 `JTable`是Java Swing GUI库中的一...
Swing中的JTable组件是Java GUI开发中用于展示表格数据的重要工具,它是Swing库中的一个核心组件。JTable能够方便地创建和管理表格数据,同时也支持用户交互,如编辑单元格、排序、选择行等操作。下面我们将深入探讨...
除此之外,Swing提供了高级组件,如JTable用于显示和编辑表格数据,JTree用于展示树形结构数据,以及JTabbedPane用于创建选项卡式的界面。这些组件不仅增强了用户界面的交互性,也为数据管理和展示提供了便利。 ...
在Java Swing应用中,`JTable`是一种常用的组件,用于展示和操作二维数据。它提供了丰富的功能,如排序、选择和编辑。然而,`JTable`默认并不支持行间的拖放(Drag and Drop, DnD)操作。本文将详细介绍如何通过一种...
NULL 博文链接:https://erbo2008.iteye.com/blog/844681
JTable实现下拉动态加载数据,滑动动态加载数据,纯原生态java。
Swing提供了一系列预定义的组件,如按钮(JButton)、文本框(JTextField)、标签(JLabel)、面板(JPanel)、滚动窗格(JScrollPane)、列表(JList)、表格(JTable)、树(JTree)等。这些组件使得开发者可以...
Java Swing是Java编程语言中用于创建桌面应用程序图形用户界面(GUI)的一个库,它是Java Foundation Classes (JFC)的一部分。本资源包含“Java.Swing图形界面开发与案例详解.王鹏等”一书的第1章和第2章的相关代码...
首先,Swing提供了许多预定义的组件,如按钮(JButton)、文本框(JTextField)、标签(JLabel)、面板(JPanel)、滚动窗格(JScrollPane)、列表框(JList)、表格(JTable)和树视图(JTree)。这些组件可以帮助...
JTable 是java窗体应用,关于布局,JTable的方法和一些其他的运用
可以通过调用`JTable.getTableHeader()`方法获取行标题。在上述示例中,`JTable`被放置在`JScrollPane`中,这样可以确保`ColumnHeader`与`ColumnObject`都完整地显示出来。 如果直接将`JTable`添加到`JFrame`中而...