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;
}