TableModelListener に問題があります。ユーザーがセルの値を変更したときに、この値がデータベースに保存されるようにする必要があります。
問題は、セルの内容を編集するときにリスナーを追加しても、何もしないことです。
どこが間違っていますか?
テーブル付きファイル
public class Pianificatore extends javax.swing.JFrame {
private FrontController iFc = new FC();
private ADISysTableModel modelPazientiTable;
public Pianificatore() {
initComponents();
aggiornaTabelle();
tabellaPazienti.getModel().addTableModelListener(new AdisysTableModelListener(tabellaPazienti));
}
そして、これは私の TableModelListener です
package adisys.server.strumenti;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
public class AdisysTableModelListener implements TableModelListener {
JTable table;
public AdisysTableModelListener(JTable table) {
this.table = table;
}
public void tableChanged(TableModelEvent e) {
System.out.println("ciao");
}
}
こちらはテーブルモデル
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) {
return true;
}
@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
* <b>N.B. L'indice della prima colonna è 0, l'ultimo è numeroColonne-1.</b>
* @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;
}
}