JTable,TableModel和Entity

时间:2015-12-05 17:57:14

标签: jtable entity tablemodel

我将创建一个实现TableModel和TableModelListener的tablemodel类,它不是特定于每个实体的 因为getValueAt()方法将为特定实体编写,并且 如果有可能我会为所有不同的实体编写一种方法。 我的TableModel是这样的:

public class StabiliTableModel implements TableModel, TableModelListener{

protected EventListenerList listenerList = new EventListenerList();
private final EntityManager em;
private final TypedQuery<Stabili> qry;
private final List<Stabili> results;
private boolean addRowSwitch;


public StabiliTableModel(EntityManager em){
    addRowSwitch = true;
    this.em = em;
    qry = em.createNamedQuery("findAll",Stabili.class);
    results = qry.getResultList();
}

public int addBlankRow(){
    if (addRowSwitch){
        addRowSwitch = false;
        results.add(new Stabili());
        //fireTableRowsInserted(results.size() - 1, results.size() - 1);
        fireTableDataChanged();
        return results.size();
    }
    return 0;
}

@Override
public int getRowCount() {
    return results.size();
}

@Override
public int getColumnCount() {
    return 5;
}

@Override
public String getColumnName(int columnIndex) {
    switch (columnIndex){
        case 0:
            return "Id";
        case 1:
            return "Denominazione";
        case 2:
            return "Indirizzo";
        case 3:
            return "Cap";
        default:
            return "Città";
    }
}

@Override
public Class<?> getColumnClass(int columnIndex) {
    return getValueAt(0, columnIndex).getClass();
}

@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
    return columnIndex != 0;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    switch (columnIndex){
                case 0:
                    return results.get(rowIndex).getId();
                case 1:
                    return results.get(rowIndex).getDenominazione();
                case 2:
                    return results.get(rowIndex).getIndirizzo();
                case 3:
                    return results.get(rowIndex).getCap();
                case 4:
                    return results.get(rowIndex).getCitta();
                default:
                    return null;
    }
}

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    //fireTableCellUpdated(row, col);

    switch (columnIndex){
        case 1:
            if(!aValue.equals(results.get(rowIndex).getDenominazione())){
                results.get(rowIndex).setDenominazione(aValue.toString());
                fireTableRowsUpdated(rowIndex,columnIndex);
            }
            break;
        case 2:
            if(!aValue.equals(results.get(rowIndex).getIndirizzo())){
                results.get(rowIndex).setIndirizzo(aValue.toString());
                fireTableRowsUpdated(rowIndex,columnIndex);
            }
            break;
        case 3:
            if(!aValue.equals(results.get(rowIndex).getCap())){
                results.get(rowIndex).setCap(aValue.toString());
                fireTableRowsUpdated(rowIndex,columnIndex);
            }
            break;
        case 4:
            if(!aValue.equals(results.get(rowIndex).getCitta())){
                results.get(rowIndex).setCitta(aValue.toString());
                fireTableRowsUpdated(rowIndex,columnIndex);
            }
    }



}

@Override
public void addTableModelListener(TableModelListener l) {
    listenerList.add(TableModelListener.class, l);

}

@Override
public void removeTableModelListener(TableModelListener l) {
    listenerList.remove(TableModelListener.class, l);
}

@Override
public void tableChanged(TableModelEvent e) {
    System.out.println("Tipo di evento:"+ e.getType());
    if(addRowSwitch){
        switch(e.getType()){
            case  TableModelEvent.UPDATE:
                em.getTransaction().begin();
                em.getTransaction().commit();
                break;
        }
    }
}

........
managing of events        
}

问题在于,在我的数据库中有大约50个或更多的表,每个表都由一个实体类映射,并且每个表都在一个Jtable中具有rappresent,因此具有不同的tablemodel。 嘿,你可以看到必须为每个实体重写一些方法,因为每个实体都有他的getter和setter方法。在使用实体之前,数据在列表或数组中以二维方式映射,以便检索您必须执行的sigle数据: 阵列[行] [山口] 所以

public Object getValueAt(int rowIndex, int columnIndex) {
    return result[rowIndex][columnIndex];
}

通过这种方式,我的表模型适用于每个表。

0 个答案:

没有答案