jtable怎么用,JTable是什么

  jtable怎么用,JTable是什么

  具有排序和过滤功能的JTable

  在JavaSE6中,除了java.awt的更新,javax.swing也有了很大的改进。我们经常在C/S程序中使用“表格”。例如,我们可以查询数据库,并在表格中显示查询结果。JTable类用于在Java中显示表格。在之前的版本中,JTable只能简单的显示数据,没有任何额外的处理功能,而JavaSE6中的JTable增加了排序和过滤功能。用户可以点击列标题进行排序,也可以根据某一列过滤表中的数据。

  为了让JTable对数据进行操作,RowSorter类必须与JTable相关联。RowSorter是一个抽象类,负责将JTable中的数据映射成可排序的数据。在实际使用中,我们会直接使用RowSorter的子类tableRowSorter。以下代码显示了如何将TableRowSorter类与JTable相关联。tablemodel model=newDefaultTableModel(行,列);

  JTabletable=newJTable(模型);

  RowSortersorter=newtablerowssorter(模型);

  table.setRowSorter(排序器);

  上面的代码首先建立一个TableModel,然后将这个TableModel的实例同时传递给JTable和RowSorter。下面是一个使用JTable排序的简单例子。import javax . swing . *;

  import javax . swing . table . *;

  import Java . awt . *;

  publicsclasstestsortedtable

  {

  publicstaticvoidmain(string args[])

  {

  JFrame=new JFrame (JTable排序测试);

  frame . setdefaultcloseoperation(JFrame。EXIT _ ON _ CLOSE);

  //表格中显示的数据

  Objectrows[][]=

  {

  { 王明,中国,44},

  { 姚明,中国,25},

  {《赵子龙》,《西蜀》,1234年},

  {《曹操》,《北魏》,2112},

  { 比尔盖茨,美国,45},

  { 迈克,英格兰,33 } };

  Stringcolumns[]=

  { 姓名,国籍,年龄 };

  tablemodel model=newDefaultTableModel(行,列);

  JTabletable=newJTable(模型);

  row sorter table model sorter=newtablerowstorter table model(model);

  table.setRowSorter(排序器);

  JScrollPanepane=newJScrollPane(table);

  frame.add(pane,BorderLayout。中心);

  frame.setSize(300,150);

  frame . set visible(true);

  }

  }

  图3显示了根据“年龄”的降序。但是我们发现了一个奇怪的问题,就是‘年龄’字段是按字符型而不是数值型排序的。

  这是因为默认情况下DefaultTableModal的列属于Object类型。若要按数值对JTable进行排序,必须重写DefaultTableModal的getColumnClass方法。TableModelmodel=newDefaultTableModel(行,列)

  {

  public class getcolumn class(int column)

  {

  ClassreturnValue

  if((column=0)(column getColumnCount()))

  {

  returnValue=getValueAt(0,列)。getClass();

  }

  其他

  {

  returnValue=Object.class

  }

  returnreturnValue

  }

  };

  让我们来看看JTable是如何用于过滤的。我们可以通过convertRowIndexToModel方法进行筛选。以下代码向按钮添加一个事件代码,以调用JTable的过滤函数。button . addactionlistener(newActionListener()

  {

  publicfoidactionperformed(ActionEvente)

  {

  string text=filter text . gettext();

  if(text.length()==0)

  {

  sorter . setrow filter(null);

  }

  其他

  {

  sorter . setrow filter(row filter . regex filter(text));

  }

  }

  });

  上面的代码没有调用convertRowIndextoModel()方法。如果调用它,就可以在表中执行相应的操作。

  在JTable中,行是由抽象类RowFilter类过滤的。与排序不同,您可以使用这个抽象类的六个静态方法,而不是创建它们的子类。

  和过滤器

  dateFilter(RowFilter。ComparisonTypetype,Datedate,int.指数)

  notFilter(行过滤器M,I过滤器)

  numberFilter(RowFilter。ComparisonTypetype,Numbernumber,int.指数)

  orFilter

  regex filter(string egex,int.指数)

  andFilter()或orFilter()和notFilter()方法的作用是将当前的过滤条件与其他过滤条件结合起来。例如,当同时比较日期和值时,需要将日期筛选和值筛选结合起来。这些组合非常简单。

  行过滤器的类型比较允许你进行四种关系的比较,等于、不等于、大于或小于。我们可以通过指定某一列进行过滤,也可以对所有的列进行过滤。这其中最为有趣的也许是正则表达式过滤(正则表达式过滤器,或简称为regexfilter)。使用这个过滤器可以对表中数据进行更高级的过滤。下面是实现一个简单过滤器的代码导入javax。挥棒。*;

  导入javax。挥棒。桌子。*;

  导入Java。awt。*;

  导入Java。awt。事件。*;

  publicsclasstestfilter

  {

  publicstaticvoidmain(字符串参数[])

  {

  JFrameframe=newJFrame(JTable的过滤测试);

  框架。setdefaultcloseoperation(JFrame .EXIT _ ON _ CLOSE);

  Objectrows[][]=

  {

  {王明,中国,44},

  {姚明,中国,25},

  {赵子龙,西蜀,1234},

  {曹操,北魏,2112},

  { 比尔盖茨,美国,45},

  { 迈克,英国,33}};

  Stringcolumns[]=

  {姓名,国籍,年龄};

  TableModelmodel=newDefaultTableModel(行,列)

  {

  公共类getcolumn类(int列)

  {

  ClassreturnValue值

  if((column=0)(column getColumnCount()))

  {

  returnValue=getValueAt(0,列)。getClass();

  }

  其他

  {

  returnValue=Object.class

  }

  return返回值

  }

  };

  finalJTabletable=newJTable(模型);

  finaltablerowssorter表模型sorter=newtablerowssorter表模型(模型);

  table.setRowSorter(排序器);

  JScrollPanepane=newJScrollPane(table);

  frame.add(pane,BorderLayout .中心);

  jpanel panel=new jpanel(newBorderLayout());

  JLabellabel=newJLabel(过滤);

  panel.add(label,BorderLayout .西);

  finalJTextFieldfilterText=newJTextField();

  panel.add(filterText,BorderLayout .中心);

  frame.add(panel,BorderLayout .北);

  JButtonbutton=newJButton(过滤);

  按钮。addactionlistener(newActionListener()

  {

  publicfoidactionperformed(action evente)

  {

  字符串文本=过滤文本。gettext();

  if(text.length()==0)

  {

  分拣员。setrow过滤器(空);

  }

  其他

  {

  分拣员。setrow filter(行过滤器。正则表达式筛选器(文本));

  }

  }

  });

  frame.add(button,BorderLayout .南);

  frame.setSize(300,250);

  框架。设置可见(真);

  }

  }

  图5是上面程序的运行界面。

  转自:http://嗨。百度一下。com/pidk/blog/item/875 b 44232 b 53 EB 529922 EDC。超文本标记语言

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: