Witam,
Mam problem jak w temacie. Stworzyłem prosty TableModel który pobiera dane z obiektu ResulSet:
class TableModel extends AbstractTableModel{
ResultSet rst = null;
int rowsCount = 0;
String[] header = {"ID", "NAZWA", "NUMER"};
String[][] data = null;
public TableModel(ResultSet rst){
this.rst = rst;
try{
while(rst.next()){
rowsCount++;
}
data = new String[rowsCount][3];
rst.first();
rst.previous();
int i = 0;
while(rst.next()){
data[i][0] = rst.getString(1);
data[i][1] = rst.getString(2);
data[i][2] = rst.getString(3);
i++;
}
}catch(SQLException ex){
ex.printStackTrace();
}
}
public int getColumnCount(){
return header.length;
}
public int getRowCount(){
return data.length;
}
public String getColumnName(int col){
return header[col];
}
public Object getValueAt(int row, int col){
return data[row][col];
}
public boolean isCellEditable(int row, int col){
if(col < 1){
return false;
}else{
return true;
}
}
}
Następinie stworzyłem na jego podstawię tabelę i dodałem TableModelListener()
TableModel tbM = new TableModel(rst);
table = new JTable(tbM);
table.getModel().addTableModelListener(this);
Przysłoniłem metodę tableChanged()
public void tableChanged(TableModelEvent ev){
int row = ev.getFirstRow();
int column = ev.getColumn();
TableModel model = (TableModel)ev.getSource();
String columnName = model.getColumnName(column);
Object data = model.getValueAt(row, column);
System.out.println("Row:" + row + " Column:" + column);
}
I nic... Miałem nadzieję, że Listener przechwyci zdarzenie polegające na zmianie danych w komórce JTable ale on po prostu nic nie słyszy. Bardzo proszę o wskazówkę co robię źle.
Pozdrawiam.