由于普通的JTable只接收二维数组的信息。但是集合类的很难转化为二维数组,这时候我们可以自定义一个AbstractTableModel 从而实现集合信息呈现在JTable上面。
处理方法代码:
public CusTableModel(List<FareMessage>list){
this.list=list;
}
//行数,及数据集合的大小
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return list.size();
}
//列数,固定值,即字段
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return 5;
}
//给定行号列号,返回一个元素,我们以list的下标为行号,列号对应FareMessage的不同的字段
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
if(rowIndex < 0 || rowIndex > list.size()){
return null;
}
switch(columnIndex){
case 0:
return this.list.get(rowIndex).getNum();
case 1:
return this.list.get(rowIndex).getOrderNum();
case 2:
return this.list.get(rowIndex).getFareName();
case 3:
return this.list.get(rowIndex).getIdNum();
case 4:
return this.list.get(rowIndex).getAirNum();
default:
return "-";
}
}
//获取列名
public String getColumnName(int column) {
switch(column){
case 0:
return "序号";
case 1:
return "订单号";
case 2:
return "姓名";
case 3:
return "身份证";
case 4:
return "航班号";
default:
return "-";
}
}
这里需要注意的是,获取列名的方法,AbstractTableModel本身自己不再需要重写,需要自己构造,构造方法名一定要与 public String getColumnName(int column) 这个方法名相同,不然无法显示列名,列名默认为A,B,C
该自定义类的实现:
//调用CusTableModel,实现自定义表格
CusTableModel ptm2=new CusTableModel(list3);
//本窗口大小,图标
Toolkit tk=Toolkit.getDefaultToolkit();
Dimension e1=jf2.getToolkit().getScreenSize();
jf2.setLocation((d.width-d.width/2)/2,(d.height-d.height/2)/2);
jf2.setSize(d.width/2, d.height/2);
jf2.setIconImage(tk.getImage("image/ico.jpg"));
//组件的添加
jtb2=new JTable(ptm2);
//将JTable加入jscrollPlane里面,不然无法显示JTable
jsp2=new JScrollPane(jtb2);
//实现点击表格的列名进行排序
RowSorter<TableModel>sort2=new TableRowSorter<TableModel>(ptm2);
jtb2.setRowSorter(sort2);
//设置行距
jtb2.setPreferredScrollableViewportSize(e1);
//编辑表格不可编辑
jtb2.setEnabled(false);
//设置表信息
jsp2.setBorder(BorderFactory.createTitledBorder("乘客信息"));
//将JScrollPlane放置中心
jf2.add(BorderLayout.CENTER,jsp2);