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;

codice:
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);
    }

 
}
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 qui
codice:
Paziente row = this.content.elementAt(rowIndex);
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...

Se c'è bisogno che posti altre classi non esitate a chiedere