Ciao a tutti,

ho un piccolo problema relativo ad una programma che gestisce una rubrica telefonica mediante un'interfaccia grafica. Ho svolto tutte le funzionalità (Bottone Apri: permette all'utente di scegliere un file, Bottone Salva sovrascrive le modifiche effettuate, Bottoni Avanti - Indietro scorrono la rubrica, Bottone Nuovo crea un nuovo contatto in coda, e Bottone Delete elimina un contatto esistente.

Il mio problema è proprio nella funzionalità del Bottone Elimina in quanto mi cancella il contatto sucessivo rispetto a quello che voglio eliminare e non sono riuscito a trovare una soluzione. Vi posto le parti di codice interessate:

codice:
deleteAct=new AbstractAction("Delete"){

		@Override
		public void actionPerformed(ActionEvent e) {
				
			int rowToDelete=(rv.getTab().getSelectedRow());	
			System.out.println("rowToDelete"+rowToDelete);
			rm.removeSchedaAt(rv.getTfName().getText(),  rv.getTfSurname().getText(), rv.getTfTelephone().getText(), rv.getTfEmail().getText(),(rowToDelete+1));
			rv.getLabError().setText("Contact deleted");
			
		}
		
	};

codice:
public class RubricaModel extends AbstractTableModel{

	private ArrayList<Scheda> schede;
	
	public RubricaModel() {
		schede=new ArrayList<Scheda>();
	}
	
	
	public void removeSchedaAt(String name,String surname,String telephone,String email, int i){
		
		schede.remove(i);
		
		fireTableRowsDeleted(i,i);
	}
	
	public void save(String name, String surname, String telephone, String email) throws IOException{

		Scheda s;
		PrintWriter pw;
		Iterator<Scheda> it=schede.iterator();

		pw = new PrintWriter(new FileWriter("rubrica.txt"));
	
			while(it.hasNext()){
				s = it.next();
				if(s.getEmail().equalsIgnoreCase("") || s.getEmail().equalsIgnoreCase("(opzionale)")){
					pw.println(s.getName() + "," + s.getSurname() + "," + s.getTelephone());}
				else {
					pw.println(s.getName() + "," + s.getSurname() + "," + s.getTelephone() + "," + s.getEmail());
				}
			}
			pw.close();
		
	}

	public void aggiornaScheda(String name, String surname, String telephone, String email, int current){
		
		schede.get(current).setName(name);
		schede.get(current).setSurname(surname);
		schede.get(current).setTelephone(telephone);
		schede.get(current).setEmail(email);

	}

	public ArrayList<Scheda> getSchede() {
		return schede;
	}

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

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

	@Override
	public Object getValueAt(int r, int c) {
		String field=null;
		Scheda s=schede.get(r);
		
		if(s!=null){
			switch(c){
			case 0:
				field=s.getName();
				break;
			case 1:
				field=s.getSurname();
				break;
			case 2:
				field=s.getTelephone();
				break;
			case 3:
				field=s.getEmail();
				break;
			default:
				break;
			}
		}
		return field;
	}