Java 自定义的JTable

来源:互联网 发布:淘宝宝贝详情图片宽度 编辑:程序博客网 时间:2024/06/15 21:20

由于普通的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);