0

i would create a tablemodel class that implements TableModel and TableModelListener and its not specific for every entity cause the method getValueAt() will be written for specific entity, and if it possible i would write one method for all different entities. My TableModel is like this:

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        
}

The problem is this, in my db there are about 50 and more tables, every of one is mapped by an entity class, and every of one has rappresented in a Jtable so has un different tablemodel. Hew you could see some methods have to be re-written for every one entity, cause every entity has his getter and setter methods. Before the use of entities the data where mapped in list or array bi-dimensional so to retrive the sigle data you have to do : array[row][col] so

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

In this way my table model is good for every tables.

Andrea
  • 3
  • 6
  • You question is very broad and a possible duplicate of [*Change Column Type of jtable when table populate from resultset*](http://stackoverflow.com/q/22180425/230513). – trashgod Dec 05 '15 at 18:31
  • I think you didnt understand my problem, infact the example that you link me doesnt use the entity like data map. – Andrea Dec 05 '15 at 20:48
  • Please edit your question to clarify and include a [mcve] that shows your current approach. – trashgod Dec 06 '15 at 07:28

0 Answers0