带有排序和过滤功能的JTable 在JavaSE6中除了java.awt被更新外,javax.swing同时也有了很大的改进。在C/S程序中我们会经常使用到"表"。如我们 可以在查询数据库后将查询结果显示在表格中。在Java中显示表格使用的是JTable类。在以前的版本中,JTable只能简单地显示数据,并没有什么 附加的处理功能,而在JavaSE6中的JTable增加了排序和过滤功能。用户可以单击列头进行排序,也可以根据某一列来过滤表中的数据。
为了使JTable可以对数据进行,必须将RowSorter类和JTable进行关联。RowSorter是一个抽象类,它负责将JTable中的 数据映射成可排序的数据。在真正使用时,我们将直接使用RowSorter的子类TableRowSorter。下面的代码显示了如何将 TableRowSorter类和JTable相关联。
TableModelmodel=newDefaultTableModel(rows,columns); JTabletable=newJTable(model); RowSortersorter=newTableRowSorter(model); table.setRowSorter(sorter); |
上面代码首先建立一个TableModel,然后将这个TableModel的实例同时传递给了JTable和RowSorter。下面是一个使用JTable排序的简单的例子。
importjavax.swing.*; importjavax.swing.table.*; importjava.awt.*;
publicclassTestSortedTable { publicstaticvoidmain(Stringargs[]) { JFrameframe=newJFrame("JTable的排序测试"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //表格中显示的数据 Objectrows[][]= { {"王明","中国",44}, {"姚明","中国",25}, {"赵子龙","西蜀",1234}, {"曹操","北魏",2112}, {"BillGates","美国",45}, {"Mike","英国",33}}; Stringcolumns[]= {"姓名","国籍","年龄"}; TableModelmodel=newDefaultTableModel(rows,columns); JTabletable=newJTable(model); RowSorter<TableModel>sorter=newTableRowSorter<TableModel>(model); table.setRowSorter(sorter); JScrollPanepane=newJScrollPane(table); frame.add(pane,BorderLayout.CENTER); frame.setSize(300,150); frame.setVisible(true); } } |
图1和图2分别是按"姓名"进行升序和降序排列的显示结果。
图1按"姓名"升序显示 图2按"姓名"降序显示
|
图3显示的是按"年龄"进行降序排列。但我们发现一个奇怪的问题,就是"年龄"字段并不是按数值类型进行排序的,而是按字符类型进行排序的。
图3按年龄降序显示
|
出现这种情况是因为在默认情况下DefaultTableModal的列是Object类型。而要想使JTable按数值进行排序,必须要覆盖DefaultTableModal的getColumnClass方法。
TableModelmodel=newDefaultTableModel(rows,columns) { publicClassgetColumnClass(intcolumn) { ClassreturnValue; if((column>=0)&&(column<getColumnCount())) { returnValue=getValueAt(0,column).getClass(); } else { returnValue=Object.class; } returnreturnValue; } }; |
图4显示了按"年龄"进行排序的界面,看看,是不是按数值进行排序了。
图4按数值类型进行排序
|
下面让我们来看看来何使用JTable进行过滤。我们可以通过convertRowIndexToModel方法进行过滤。下面的代码加在一个按钮中添加事件代码调用JTable的过滤功能。
button.addActionListener(newActionListener() { publicvoidactionPerformed(ActionEvente) { Stringtext=filterText.getText(); if(text.length()==0) { sorter.setRowFilter(null); } else { sorter.setRowFilter(RowFilter.regexFilter(text)); } } }); |
上面的代码并没有调用convertRowIndextoModel()方法,如果调用它,你就可以在表中进行相应的操作。
在JTable中通过抽象类RowFilter类对行进行过滤。和排序不同,你可以不建立它们的子类,而使用这个抽象类的6个静态方法。
·andFilter
·dateFilter(RowFilter.ComparisonTypetype,Datedate,int...indices)
·notFilter(RowFilter<M,I>filter)
·numberFilter(RowFilter.ComparisonTypetype,Numbernumber,int...indices)
·orFilter
·regexFilter(Stringregex,int...indices)
其中andFilter()、orFilter()以及notFilter()方法的功能是将当前的过滤条件和其它的过滤条件进行组合。如在同时比较日期和数值时需要将日期过滤和数值过滤进行组合。这些组合是非常简单的。
RowFilter的类型比较允许你进行4种关系的比较,等于、不等于、大于或小于。我们可以通过指定某一列进行过滤,也可以对所有的列进行过滤。这 其中最为有趣的也许是正则表达式过滤(regularexpressionfilter,或简称为regexfilter)。使用这个过滤器可以对 表中数据进行更高级的过滤。下面是实现一个简单过滤器的代码。
importjavax.swing.*; importjavax.swing.table.*; importjava.awt.*; importjava.awt.event.*;
publicclassTestFilter { publicstaticvoidmain(Stringargs[]) { JFrameframe=newJFrame("JTable的过滤测试"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Objectrows[][]= { {"王明","中国",44}, {"姚明","中国",25}, {"赵子龙","西蜀",1234}, {"曹操","北魏",2112}, {"BillGates","美国",45}, {"Mike","英国",33}}; Stringcolumns[]= {"姓名","国籍","年龄"}; TableModelmodel=newDefaultTableModel(rows,columns) { publicClassgetColumnClass(intcolumn) { ClassreturnValue; if((column>=0)&&(column<getColumnCount())) { returnValue=getValueAt(0,column).getClass(); } else { returnValue=Object.class; } returnreturnValue; } }; finalJTabletable=newJTable(model); finalTableRowSorter<TableModel>sorter=newTableRowSorter<TableModel>(model); table.setRowSorter(sorter); JScrollPanepane=newJScrollPane(table); frame.add(pane,BorderLayout.CENTER); JPanelpanel=newJPanel(newBorderLayout()); JLabellabel=newJLabel("过滤"); panel.add(label,BorderLayout.WEST); finalJTextFieldfilterText=newJTextField(""); panel.add(filterText,BorderLayout.CENTER); frame.add(panel,BorderLayout.NORTH); JButtonbutton=newJButton("过滤"); button.addActionListener(newActionListener() { publicvoidactionPerformed(ActionEvente) { Stringtext=filterText.getText(); if(text.length()==0) { sorter.setRowFilter(null); } else { sorter.setRowFilter(RowFilter.regexFilter(text)); } } }); frame.add(button,BorderLayout.SOUTH); frame.setSize(300,250); frame.setVisible(true); } } |
图5是上面程序的运行界面。
转自:http://hi.baidu.com/pidk/blog/item/875b44232b53eb529922edc0.html
分享到:
相关推荐
JTable使用 JTable使用JTable使用JTable使用
swing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing ...
在这个“JAVA JTable使用实例”中,我们将深入探讨如何有效地利用`JTable`来显示和操作数据。 首先,`JTable`是`javax.swing.JTable`类的实例,它允许我们以表格的形式展示数据。这个实例可能包括创建一个`...
jtable使用方法介绍,很专业,内容详细,蛮有用。
在这个详细的JTable使用例子中,我们主要探讨如何利用Java Swing组件JTable来展示、操作数据库中的数据。JTable是Swing GUI中用于显示和编辑表格数据的重要组件,它提供了丰富的功能,包括添加、删除和修改表格中的...
最后,这个"JTable使用自定义数据类型示例工程"可能包含了MWorkpace文件夹,其中可能包含了项目的源代码、编译后的类文件或相关的配置文件。这个工程提供了一个实际操作的例子,帮助开发者理解和学习如何在Swing应用...
Java jtable使用 包括读取数据库 虚拟表模型
#### jtable使用方法介绍 ##### 创建表格 在创建表格之前,我们需要导入必要的包: ```java import javax.swing.JTable; import javax.swing.table.DefaultTableModel; ``` 有两种主要的方式创建表格:一种是...
在这个主题中,我们将深入探讨JTable的使用,包括它的基本概念、创建方法、与数据库的连接以及其强大的功能。 1. **基本概念** - **JTable组件**:JTable是Java AWT/Swing GUI的一部分,它继承自JComponent,用于...
JTable的使用收藏 1.JTable与TableModel 1.TableModel与JTable的关系 2.TableModel实践 3.使用JTable+TableModel展示java中的数据对象 2.JTable展示方式的美化 1.设置表格的宽度和高度 2.要显示表头 3.新加列,将...
在Java Swing库中,`JTable`是一个非常重要的组件,用于在GUI应用程序中展示数据集。它是Swing的`javax....通过实践和研究提供的示例代码,你将能够熟练地在Java Swing应用中使用`JTable`来构建功能丰富的用户界面。
下面我们将深入探讨`JTable`的使用方法。 1. **`JTable`的基本概念** `JTable`是`javax.swing.JTable`类的实例,它继承自`JComponent`并实现了`TableModelListener`接口。`JTable`的核心在于`TableModel`,它定义...
深入学习jTable的使用,能够帮助开发者创建用户友好的界面,使得数据的管理与展示更加直观高效。** ### jTable的基本结构与使用 jTable由`DefaultTableModel`类驱动,它负责存储表格的数据和列信息。创建一个jTable...
JTable 使用 TableModel 来获取数据,并将其显示在界面上。 TableModel 实践 TableModel 的实现可以是静态的,也可以是动态的。静态实现中,数据是预先定义好的,而动态实现中,数据可以来自数据库或其他数据源。...
JTable 动态刷新数据是指在 Java Swing 应用程序中,使用 JTable 组件展示数据,并实时更新数据的过程。这种技术在很多实际应用场景中非常有用,如股票交易平台、实时监控系统、电子表格等。 首先,在使用 JTable ...
`一个详细的JTable使用例子.docx`则提供了实际的代码示例,帮助理解如何在程序中集成`JTable`,并实现特定功能,比如合并单元格。 在实际编程中,你可能会遇到一些常见问题,比如如何自定义表格的行高、列宽,或者...
在"swing中JTable的简单使用"这个主题中,我们将深入探讨如何在Java Swing应用中有效地使用JTable。 首先,JTable是javax.swing.JTable类的实例,它是JFrame或JPanel等容器中的一个组件。JTable通常与TableModel...
this.setTitle("JTable使用示例"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } ``` 在这个修正后的代码中,首先确保了`column`中的每个元素都是有效的表头名称,去除了...
总的来说,这个文档提供了一个基础的JTable使用示例,包括创建、设置表格样式以及可能的自定义渲染。在实际项目中,开发者可能需要扩展这些基础功能,比如动态更新数据、响应用户交互、处理更复杂的数据显示逻辑等。
这个"JTable 练习例子exa"显然是一个实践项目,旨在帮助开发者巩固和理解`JTable`的使用。 `JTable`的基本构造函数通常需要一个`TableModel`,这是`JTable`的数据源,它可以是`DefaultTableModel`或其他自定义实现...