`
javasalatu
  • 浏览: 753993 次
  • 性别: Icon_minigender_2
  • 来自: 北京
博客专栏
96df99eb-e89d-3228-9c8e-967fc745ec52
程序员的自我经营之道
浏览量:7804
文章分类
社区版块
存档分类
最新评论

JTable使用

 
阅读更多
带有排序和过滤功能的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使用JTable使用JTable使用

    swing Jtable使用checkbox

    swing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing ...

    JAVA JTable使用实例

    在这个“JAVA JTable使用实例”中,我们将深入探讨如何有效地利用`JTable`来显示和操作数据。 首先,`JTable`是`javax.swing.JTable`类的实例,它允许我们以表格的形式展示数据。这个实例可能包括创建一个`...

    jtable使用方法介绍

    jtable使用方法介绍,很专业,内容详细,蛮有用。

    一个详细的JTable使用例子

    在这个详细的JTable使用例子中,我们主要探讨如何利用Java Swing组件JTable来展示、操作数据库中的数据。JTable是Swing GUI中用于显示和编辑表格数据的重要组件,它提供了丰富的功能,包括添加、删除和修改表格中的...

    JTable使用自定义数据类型示例工程

    最后,这个"JTable使用自定义数据类型示例工程"可能包含了MWorkpace文件夹,其中可能包含了项目的源代码、编译后的类文件或相关的配置文件。这个工程提供了一个实际操作的例子,帮助开发者理解和学习如何在Swing应用...

    Java jtable使用 包括读取数据库 虚拟表模型

    Java jtable使用 包括读取数据库 虚拟表模型

    jtable使用参考

    #### jtable使用方法介绍 ##### 创建表格 在创建表格之前,我们需要导入必要的包: ```java import javax.swing.JTable; import javax.swing.table.DefaultTableModel; ``` 有两种主要的方式创建表格:一种是...

    Java JTable 使用

    在这个主题中,我们将深入探讨JTable的使用,包括它的基本概念、创建方法、与数据库的连接以及其强大的功能。 1. **基本概念** - **JTable组件**:JTable是Java AWT/Swing GUI的一部分,它继承自JComponent,用于...

    JTable的使用收藏

    JTable的使用收藏 1.JTable与TableModel 1.TableModel与JTable的关系 2.TableModel实践 3.使用JTable+TableModel展示java中的数据对象 2.JTable展示方式的美化 1.设置表格的宽度和高度 2.要显示表头 3.新加列,将...

    学会JTable的使用

    在Java Swing库中,`JTable`是一个非常重要的组件,用于在GUI应用程序中展示数据集。它是Swing的`javax....通过实践和研究提供的示例代码,你将能够熟练地在Java Swing应用中使用`JTable`来构建功能丰富的用户界面。

    JAVA中JTable的使用方法

    下面我们将深入探讨`JTable`的使用方法。 1. **`JTable`的基本概念** `JTable`是`javax.swing.JTable`类的实例,它继承自`JComponent`并实现了`TableModelListener`接口。`JTable`的核心在于`TableModel`,它定义...

    jTable的使用

    深入学习jTable的使用,能够帮助开发者创建用户友好的界面,使得数据的管理与展示更加直观高效。** ### jTable的基本结构与使用 jTable由`DefaultTableModel`类驱动,它负责存储表格的数据和列信息。创建一个jTable...

    2.高级Swing组件JTable应用[归纳].pdf

    JTable 使用 TableModel 来获取数据,并将其显示在界面上。 TableModel 实践 TableModel 的实现可以是静态的,也可以是动态的。静态实现中,数据是预先定义好的,而动态实现中,数据可以来自数据库或其他数据源。...

    JTable动态刷新数据

    JTable 动态刷新数据是指在 Java Swing 应用程序中,使用 JTable 组件展示数据,并实时更新数据的过程。这种技术在很多实际应用场景中非常有用,如股票交易平台、实时监控系统、电子表格等。 首先,在使用 JTable ...

    swing jtable 合并

    `一个详细的JTable使用例子.docx`则提供了实际的代码示例,帮助理解如何在程序中集成`JTable`,并实现特定功能,比如合并单元格。 在实际编程中,你可能会遇到一些常见问题,比如如何自定义表格的行高、列宽,或者...

    swing中JTable的简单使用

    在"swing中JTable的简单使用"这个主题中,我们将深入探讨如何在Java Swing应用中有效地使用JTable。 首先,JTable是javax.swing.JTable类的实例,它是JFrame或JPanel等容器中的一个组件。JTable通常与TableModel...

    JTble使用不显示表头的问题

    this.setTitle("JTable使用示例"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } ``` 在这个修正后的代码中,首先确保了`column`中的每个元素都是有效的表头名称,去除了...

    javaJtable经典列设置+表格颜色.doc

    总的来说,这个文档提供了一个基础的JTable使用示例,包括创建、设置表格样式以及可能的自定义渲染。在实际项目中,开发者可能需要扩展这些基础功能,比如动态更新数据、响应用户交互、处理更复杂的数据显示逻辑等。

    JTable 练习例子exa

    这个"JTable 练习例子exa"显然是一个实践项目,旨在帮助开发者巩固和理解`JTable`的使用。 `JTable`的基本构造函数通常需要一个`TableModel`,这是`JTable`的数据源,它可以是`DefaultTableModel`或其他自定义实现...

Global site tag (gtag.js) - Google Analytics