我遇到了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;
}
}