package com.csdnsoft.tablemodel;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import com.csdnsoft.entity.Dept;
/**
* 部门数据表格的显示模型(渲染模型)
* @author guoyang
*/
public class DeptTableModel extends AbstractTableModel {
private static final long serialVersionUID = -893747830254669146L;
public static final String[] DEPT_TITLE = {"编号", "姓名", "描述", "创建时间"};
private List<Dept> deptList = new LinkedList<Dept>(); //存放数据
private DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public String getColumnName(int column) { //重写获取表格列标题的方法
return DEPT_TITLE[column];
}
/* (non-Javadoc)
* @see javax.swing.table.TableModel#getColumnCount()
*/
@Override
public int getColumnCount() { //重写获取总列数的方法
return DEPT_TITLE.length;
}
/* (non-Javadoc)
* @see javax.swing.table.TableModel#getRowCount()
*/
@Override
public int getRowCount() { //重写获取总行数的方法
return deptList.size();
}
/* (non-Javadoc)
* @see javax.swing.table.TableModel#getValueAt(int, int)
*/
@Override
public Object getValueAt(int rowIndex, int columnIndex){//重写获取指定行指定列的单元格中的数
Object result = null;
Dept dept = deptList.get(rowIndex); //定位到行
switch (columnIndex) {
case 0:
result = String.valueOf(dept.getId());
break;
case 1:
result = dept.getName();
break;
case 2:
result = dept.getDescription();
break;
case 3:
Date ct = dept.getCreated_time();
if(null != ct){
result = df.format(ct);
}else{
result = "";
}
break;
default:
break;
}
return result;
/*
if(columnIndex == 0){
return String.valueOf(dept.getDept_id());
}else if(columnIndex == 1){
return dept.getName();
}else if(columnIndex == 2){
return dept.getDescription();
}else{
return null;
}*/
}
/**
* 获取指定行中的对象
*/
public Object getRow(int rowIndex){
return deptList.get(rowIndex);
}
/**
* 清空整个表格的数据
*/
public void removeAll(){
int size = deptList.size();
for(int i = size - 1; i >= 0; i--){
delete(i);
}
}
/**
* 往数据表格模型中添加一行数据
* @param dept
*/
public void add(Dept dept){
deptList.add(dept);
fireTableRowsInserted(deptList.size()-1, deptList.size());//通知表格模型中指定范围已经插入数据
}
/**
* 删除表格模型中的指定行
* @param rowIndex 行的索引值(从0开始的值)
*/
public void delete(int rowIndex){
deptList.remove(rowIndex);
fireTableRowsDeleted(rowIndex, rowIndex+1); //通知监听器
}
/**
* 更新表格模型中指定行的数据
* @param rowIndex 行的索引值
* @param dept 新的部门数据
*/
public void update(int rowIndex, Dept dept){
deptList.remove(rowIndex);
deptList.add(rowIndex, dept);
fireTableRowsUpdated(rowIndex, rowIndex+1); //通知监听器
}
public void update(Dept dept){
int size = getRowCount();
int rowIndex = -1;
for(int i = 0; i < size; i++){
Dept temp = (Dept)getRow(i);
if(temp.getId() == dept.getId()){
rowIndex = i;
break;
}
}
if(rowIndex >= 0){
update(rowIndex, dept);
}
}
}
//调用以上的方法
public void initJTable(){
dtm = new DeptTableModel();
jtable = new JTable(dtm);
jtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //单选模式
JScrollPane sp = new JScrollPane(jtable,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
this.add(sp, BorderLayout.CENTER);
}
dtm.removeAll(); //把原来的数据清空
for(int i = 0; i < list.size(); i++){
dtm.add(list.get(i));
}