Witam,
mam delikatny kłopot z aplikacją pisaną w pradawnej trchnologii javy czyli swingu:
Mam taki mini projekcik który przedstawia sklep z samochodami. Klasa Klient, klasa Samochod wszystko zrobione w panelach swinga i połączone z JDBC.
Po dodaniu nowego obiektu nie mogę wykonywać na nim żadnych operacji, tylko na starych elementach, nie ważne czy to klient czy samochód.Po zresetowaniu aplikacji wszytskie zmiany są zapisane i już mogę usuwać lub updatować wcześniej dodany obiekt, ale tylko do czasu dodania nowego elementu. Teraz tak: kod wrzuce z dodawania samochodu(gdzie jest metoda update), ale przypominam że z klientem nie działa tak samo:
public void actionPerformed(ActionEvent e) {
if(e.getSource() == add)
{
String carBrand = tfCarBrand.getText();
String color = tfColor.getText();
int price = Integer.parseInt(tfPrice.getText());
int mileage = Integer.parseInt(tfMileage.getText());
double capacity = Double.parseDouble(tfCapacity.getText());
Database.insertCar(carBrand, color, price, mileage, capacity);
model1.updateLista(Database.selectCar());
}
To jest metoda (którą zaraz przerobie na lambde), która dodaje samochód. Ale wydaje mi się że kłopot może być gdzie indziej:
Otóż mam tu zastosowane TableModel, i obawia się ta metoda aktualizująca model się psuje:
public class ModelCarTable extends AbstractTableModel{
private List<Car> list; //lista bedzie zawierac elementy, gdzie kazdy element listy to bedzie sobny wiersz w naszej tabeli
private List<String> columns;
public ModelCarTable(List<Car> list, List<String> columns) {
this.list = list;
this.columns = columns;
}
public void updateLista(List<Car> lista)
{
this.list = lista;
fireTableDataChanged();
}
@Override
public int getColumnCount() {
return columns.size(); //kolumn masz tyle ile naglowkow
}
@Override
public int getRowCount() {
return list.size(); //wierszy masz tyle ile wynosi liczba elementow w liscie
}
@Override
public Object getValueAt(int rowNumber, int columnNumber) {
Car row = list.get(rowNumber); //pobierasz do obiektu s element z kolekcji lista spod indeksu row, czyli odpwiada
if (columnNumber == 0)
{
return row.getId();
}
else if (columnNumber == 1)
{
return row.getCarBrand();
}
else if (columnNumber == 2)
{
return row.getColor();
}
else if (columnNumber == 3)
{
return row.getPrice();
}
else if (columnNumber == 4)
{
return row.getCapacity();
}
else
{
return row.getMileage();
}
}
@Override
public String getColumnName(int idx) {
return columns.get(idx);
}
Z góry dzięki za poświęcenie chwilki.
Pozdrawiam