一个便于用Swing中的Table展示对象List的类
2009-09-25 14:06
344 查看
Swing开发中经常遇到这样的问题,需要将一个对象的列表直接用JTable显示出来,这时候我们往往要重写AbstractTableModel类,便于数据的展示,但是写起来还是会比较烦琐,所以对AbstractTableModel类进行了进一步的封装,使使用起来更加简单。
这样以后再有这种需要的时候,只需实现MyAbstractTableModel类,并重写其中的getProperty方法即可,当然,为了方便期间,我们会再增加一个构造方法,可参考如下一个实现(其中WorkOrder类为一个POJO类)
import java.util.ArrayList; import java.util.List; import javax.swing.table.AbstractTableModel; public abstract class MyAbstractTableModel extends AbstractTableModel { private static final long serialVersionUID = 1L; protected List<Object> datas = new ArrayList<Object>(); protected Class<?>[] columns; protected String[] columnNames; protected abstract Object getProperty(Object obj, int columnIndex); @Override public int getColumnCount() { // TODO Auto-generated method stub return columns.length; } @SuppressWarnings("unchecked") public void setData(List datas) { this.datas = datas; } public List<Object> list() { return datas; } public Object getObject(int rowIndex) { return datas.get(rowIndex); } @Override public int getRowCount() { // TODO Auto-generated method stub return datas.size(); } protected Class<?> getFieldType(Class<?> clz, String field) { try { Class<?> result = clz.getDeclaredField(field).getType(); if (result.equals(int.class)) { result = Integer.class; } else if (result.equals(boolean.class)) { result = Boolean.class; } else if (result.equals(byte.class)) { result = Byte.class; } else if (result.equals(char.class)) { result = Character.class; } else if (result.equals(long.class)) { result = Long.class; } else if (result.equals(float.class)) { result = Float.class; } else if (result.equals(double.class)) { result = Double.class; } return result; } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } return String.class; } @Override public Class<?> getColumnClass(int columnIndex) { // TODO Auto-generated method stub if (columnIndex < 0 || columnIndex > columns.length) return null; return columns[columnIndex]; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { // TODO Auto-generated method stub return false; } @Override public String getColumnName(int column) { // TODO Auto-generated method stub if (column < 0 || column > columns.length) return null; return columnNames[column]; } @Override public Object getValueAt(int rowIndex, int columnIndex) { if (rowIndex > getRowCount() || columnIndex > getColumnCount() || rowIndex < 0 || columnIndex < 0) return null; return getProperty(datas.get(rowIndex), columnIndex); } }
这样以后再有这种需要的时候,只需实现MyAbstractTableModel类,并重写其中的getProperty方法即可,当然,为了方便期间,我们会再增加一个构造方法,可参考如下一个实现(其中WorkOrder类为一个POJO类)
public class WorkOrderTableModel extends DeltaTableModel { private static final long serialVersionUID = 1L; protected List<WorkOrder> datas = new ArrayList<WorkOrder>(); public WorkOrderTableModel(List<WorkOrder> datas, String[] columnNames) { this.datas = (datas == null) ? new ArrayList<WorkOrder>() : datas; this.columnNames = columnNames; columns = new Class[] { getFieldType(WorkOrder.class, "number"), getFieldType(WorkOrder.class, "modelName"), // getFieldType(WorkOrder.class, "createDate"), getFieldType(WorkOrder.class, "targetQty"), getFieldType(WorkOrder.class, "routeCode"), getFieldType(WorkOrder.class, "owner") }; } @Override protected Object getProperty(Object obj, int index) { WorkOrder workOrder = (WorkOrder) obj; Object result = ""; switch (index) { case 0: result = workOrder.getNumber(); break; case 1: result = workOrder.getModelName(); break; // case 2: // result = workOrder.getCreateDate(); // break; case 2: result = workOrder.getTargetQty(); break; case 3: result = workOrder.getRouteCode(); break; case 4: result = workOrder.getOwner(); break; } return result; } }
相关文章推荐
- jQuery通过json的方式响应map的list对象集合,并以table的形式展示
- 如何将一个List对象传递给皕杰报表在页面展示
- ssh前后台交互, list传输到前后展示,table传输到台数据!!!。ssh对象传输
- 用jquery把一个List里面的对象的属性,依次填入到一个table里面啊
- spring + hibernate の HQL 多表查询 合并成一个PO对象的List
- 循环往list中add对象却总是add的是一个对象
- JSON对象配合jquery.tmpl.min.js插件,手动攒出一个table
- 一个关于Json数据List和对象嵌套反序列化的工具类,java(20151130)
- 对list中的对象进行求最大值和以及排序,针对对象的某一个元素为依据
- 解决方法:Submit 操作失败。为类型“BomExtend”上的集合属性“BomChildrenList”传递了一个或多个关联对象,但目标集合为 null。
- SF :Salesforce中,得到一个对象的picklist类型下面的所有value的值
- jdbc中如何返回一个封装任意类对象的list
- Hibernate查询之SQL查询,查询结果用new新对象的方式接受,hql查询,通过SQL查询的结果返回到一个实体中,查询不同表中内容,并将查到的不同表中的内容放到List中
- iOS tableView展示最下面一个cell
- 对象中某一个字段的值为空时不进行展示
- 根据list对象的某一个属性进行排序
- list泛型,去除对象中某一个字段值重复
- 不良代码展示-不要用数组循环判断等于的方式,来判断一个对象是否在一个集合内
- 如何取得组合有一个Table里的CheckBox事件的对象
- 开启一个文本文件,一次读取其内的一行文本。令每一行形成一个String,并将读出的String对象置于LinkedList中。请以相反次序印出LinkedList内的所有文本行