Salve, è da un paio di giorni che sto letterlamente impazzendo su questo metodo. In pratica a me serve avere una JTable in cui io possa fare doppio click nelle celle e modificarne il valore. Il problema sorge appunto nella modifica, al momento di cambiare il valore della cella il metodo setValueAt non funziona, impedendomi persino di annullare l'operazione e fare altro D:
Posto qui sotto il codice sperando che qualcuno possa dirmi dove sto sbagliando...
package adisys.server.strumenti;
Ho già effettuato un test con il debugger di Eclipse per capire perchè arrivato a quel punto il programma si bloccava e ho scoperto che l'errore è causato da questa istruzione quicodice:package adisys.server.strumenti; import java.sql.*; import java.util.Formatter; import java.util.Vector; import javax.swing.JTable; import javax.swing.event.TableModelEvent; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; import adisys.server.boundary.EditorPatologie; import adisys.server.boundary.EditorPazienti; import adisys.server.data.Database; import adisys.server.data.Patologie; import adisys.server.data.Pazienti; import adisys.server.entity.Patologia; import adisys.server.entity.Paziente; /** * @author Francesco * */ public class ADISysTableModel extends AbstractTableModel implements TableModel { ResultSet dati; public ADISysTableModel(ResultSet nuoviDati) { dati=nuoviDati; try { //Trace System.out.println("- Creazione modello tabella: \""+ dati.getMetaData().getTableName(1) +"\""); } catch (SQLException e1) { e1.printStackTrace(); } } @Override public int getColumnCount() { try { return dati.getMetaData().getColumnCount(); } catch (SQLException e) { e.printStackTrace(); System.out.println("ERRORE: Calcolo del numero di colonne errato."); return 0; } } @Override public int getRowCount() { try { //Seleziona l'ultimo elemento dati.last(); //Restituisce l'indice dell'elemento return (dati.getRow()); } catch (SQLException e) { e.printStackTrace(); System.out.println("ERRORE: Calcolo del numero di righe errato. (metodo getRowCount() )"); return 0; } } @Override public Object getValueAt(int riga, int colonna) { try { //Sposta il cursore alla riga desiderata (con sfasamento di 1) dati.absolute(riga+1); //Estrae il valore nella colonna specificata e lo restituisce (con sfasamento di 1) return dati.getObject(colonna+1); } catch (SQLException e) { // In caso di errore restituisce un oggetto vuoto e.printStackTrace(); //Trace System.out.println("ERRORE: Valore dell'elemento della tabella non valido."); return null; } } @Override public boolean isCellEditable(int rIndex, int cIndex) { String tableName = ""; try { tableName = dati.getMetaData().getTableName(1); } catch (SQLException e) { // Eccezione e.printStackTrace(); } if(tableName.equals("PAZIENTI")) return true; else return false; } @Override public String getColumnName(int col) { try { return dati.getMetaData().getColumnName(col+1); } catch (SQLException e) { // Eccezione e.printStackTrace(); return "?"; } } public Integer getID(int riga) { //Ricerca colonna ID for(int i=0; i<=getColumnCount(); i++) if(getColumnName(i).equals("ID")) return i; return null; } /** * Restituisce l'indice della colonna a partire dal nome della colonna ricercata * N.B. L'indice della prima colonna è 0, l'ultimo è numeroColonne-1. * @param Nome - Stringa con il nome della colonna * @return -1 se la colonna non e' stata trovata, altrimenti l'indice della colonna */ public int getColumnIndex(String Nome) { for (int i=0; i<getColumnCount();i++) if( getColumnName(i)==Nome) return i; return -1; } Vector<Paziente> content; @Override public void setValueAt(Object value, int rowIndex, int columnIndex) { Paziente row = this.content.elementAt(rowIndex); String strValue = (String)value; int IDValue = (int)value; if(columnIndex == 0) { row.setID(IDValue); } else System.out.println("COL:" + columnIndex); if(columnIndex == 1) { row.setNome("TEST"); } else if(columnIndex == 2) { row.setCognome(strValue); } fireTableCellUpdated(rowIndex, columnIndex); } }
La cosa che non capisco è perchè la prende come NULL, visto che l'oggetto da inserire (value), rowIndex e columnIndex, stando al debug sono passati correttamente...codice:Paziente row = this.content.elementAt(rowIndex);
Se c'è bisogno che posti altre classi non esitate a chiedere![]()

Rispondi quotando