Mam tabelę z własnym modelem danych:
model = new OcenyTableModel();
table = new JTable(model);
JScrollPane scrollPane = new JScrollPane(table);
oceny = new JComboBox();
oceny.addItem("6");
oceny.addItem("5");
oceny.addItem("4");
oceny.addItem("3");
oceny.addItem("2");
oceny.addItem("1");
oceny.addItem("brak");
DefaultCellEditor editor = new DefaultCellEditor(oceny);
table.setDefaultEditor(String.class, editor);
Niestety dane w tabeli nie aktualizują się po wyborze opcji. Model tabeli wygląda tak:
public class OcenyTableModel extends AbstractTableModel {
private List<Sprawdzian> sprawdzianList;
private List<Uczen> uczenList;
@Override
public int getColumnCount() {
return sprawdzianList.size()+3;
}
@Override
public int getRowCount() {
return uczenList.size();
}
@Override
public String getColumnName(int col) {
String nazwa;
switch(col)
{
case 0: nazwa = "Imię"; break;
case 1: nazwa = "Nazwisko"; break;
case 2: nazwa = "Grupa"; break;
default: nazwa = sprawdzianList.get(col-3).getNazwa();
}
return nazwa;
}
@Override
public Object getValueAt(int row, int col) {
switch(col)
{
case 0: return uczenList.get(row).getImie();
case 1: return uczenList.get(row).getNazwisko();
case 2: return uczenList.get(row).getGrupa().getNazwa();
default: List<Ocena> oceny = uczenList.get(row).getOcenaList();
if(oceny != null) {
for(Ocena o : oceny) {
if(sprawdzianList.get(col-3).getId() == o.getId()) {
return o.getOcena().toString();
}
}
}
}
return "-";
}
@Override
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public void setSprawdziany(List<Sprawdzian> x) {
sprawdzianList = x;
}
public void setUczniowie(List<Uczen> x) {
uczenList = x;
}
@Override
public boolean isCellEditable(int row, int col) {
return col>2;
}
}
Jak widać, istnieje lista uczniów i na tej podstawie budowana jest tabela. Edytor nie wie, jak zmienić wartość. Co zrobić, aby po zmianie wartości została ona zaktualizowana, a dodatkowo wykonać operację (np. wysłać na serwer)?