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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。