Cześć,
buduję w swingu interfejs do prostego programu. I tak:
Mam klasę o nazwie Wodomierz, która zawiera proste pola (String NrWdowomierza, Int IloscOdczytow itd)
mam Klasę CopyIt, w której zdefiniowałem listę List<Wodomierz> listaWodomierzy,
Dalej, mam AbstractTableModel, o nazwie WodomierzTableModel gdzie wyświetlam zawartość listy listaWodomierzy.
Gdzieś tam w tym wszystskim istnieje StartGui, gdzie mam definicję JTable (z podpiętym WodomierzTableModel) oraz obiektem
CopyIt copyGwmax= new CopyIt();
WodomierzeTableModel wtm = new WodomierzeTableModel(copyGwmax.getListaWodomierzy());
JTable tabela = new JTable(wtm);
JScrollPane scrollPane = new JScrollPane(tabela);
oraz podpięte pod batona:
copyGwmax.doMagic_copy(); //doMagic_copy() wypełnia tablice wewnątrz klasy
wtm.FillTable(copyGwmax.getListaWodomierzy());
gdzie getListaWodomierzy() to zwyczajne:
public List<Wodomierz> getListaWodomierzy()
{
return ListaWodomierzy;
}
na chwilę obecną zrobiłem po głupiemu, w WodomierzTableModel dodałem:
public class WodomierzeTableModel extends AbstractTableModel{
List<String> NrWodomierza;
List<String> NrObiektu;
List<String> sposobRozliczania;
List<Double> srednia;
List<Integer> LiczbaOdczytow;
public void FillTable(List<Wodomierz> lw)
{
System.out.println("FillTable");
NrWodomierza.clear();
NrObiektu.clear();
sposobRozliczania.clear();
srednia.clear();
LiczbaOdczytow.clear();
{
for(Wodomierz w : lw)
{
NrObiektu.add(w.getNrObiektu());
NrWodomierza.add(w.getWodomierzNumber());
sposobRozliczania.add(w.getSposobRozliczania());
srednia.add(w.getMeanOfMeans());
LiczbaOdczytow.add(w.getLiczbaOdczytow());
System.out.println(w.toString());
}
}
fireTableDataChanged();
}
}
Ale rozwiązanie to jest mało optymalne. Chciałbym pracować nie na kopi danych, tylko przekazać referencje do właściwych pól oraz w przypadku zmiany danych w sposób inny niż przez AbstractTableModel (np metoda uruchamiana batonem aktualizująca wyznaczone średnie) chciałbym żeby TableModel został poinformowany o zmianach i mógł azktualizować widok.
Teoretycznie mogę przerzucić ciężar aplikacji na abstractTableModel i w niej wykonywać wszystkie operacje, ale chyba nie do końca ta klasa służy.
Moje pytania:
Chciałbym przekazać referencję do listaWodomierzy poprzez konstruktor WodomierzTableModel, jak to zrobić?
Chciałbym, żeby WodomierzTableModel był poinformowany, że listaWodomierzy została zaktualizowana, jak to zrobić??
Dziękuję za wszelką pomoc i rady :)
Piotrek