Jaki jest związek między JTable
, TableModel
i TableData
? Jeśli po prostu zmodyfikuję TableData
, spowoduje to również zmianę wyświetlania danych na komponencie JTable
lub muszę wywołać metodę synchronizowania tych dwóch. Spojrzałem na this, ale nie mówi to wprost ani nie pokazuje związku w zakresie aktualizacjiPowiązanie między JTable, TableModel i TableData
Odpowiedz
Po zmianie wartości w danych TableModel należy zwolnić to zdarzenie. na przykład. zmieniając wartość jednej komórki, wywołujesz fireTableCellUpdated(row, col);
.
Bardziej szczegółowo spójrz na this.
Zakładam, że używasz wyrażenia "TableData", aby po prostu oznaczać dane wyświetlane w JTable. Aby odpowiedzieć na twoje pytanie, to czy aktualizacje automatyczne będą widoczne czy nie, zależy od Twojego modelu TableModel i od interakcji z Twoimi danymi.
Model TableModel powinien wywoływać zdarzenia, gdy podstawowy model danych się zmienił, to z kolei powiadomi JTable, że zmiana wystąpiła i powinna zostać przerysowana. Tak więc pod względem relacji JTable nasłuchuje zmian zdarzeń na TableModel; TableModel nie ma wiedzy o JTable.
W zależności od organizacji modelu dane pod nią mogą ulec zmianie bez znajomości modelu TableModel. W tym przypadku, jeśli masz bezpośrednie przekazywanie danych z TableModel do danych, wartości na ekranie będą się zmieniać, gdy odbarwi się naturalnie (zmiana rozmiaru ekranu, przesuwanie myszy itp.), Ale chcesz wymusić wydarzenie, TableModel do powiadamiania JTable przez wyżej wymienione zdarzenia. Pod względem relacji, TableModel wie o danych tabeli, ale dane w tabeli nie mają wiedzy o modelu (zwykle). Model TableModel może lub nie może nasłuchiwać danych w celu wprowadzenia zmian.
Podczas ustawiania TableModel w JTable, tabela dodaje obserwatora (TableModelListener), aby uzyskać informacje o zmianach w modelu.
Podczas zmiany danych w modelu, model powinien powiadomić zarejestrowanych słuchaczy, odpalając TableModelEvent. Samo zdarzenie może zawierać dodatkowe informacje o ziarnistości zmiany (czy struktura znacząco się zmieniła, czy tylko niektóre dane komórki zostaną zmienione), aby umożliwić JTable wykonanie zoptymalizowanej aktualizacji widoku.
fireTableCellUpdated (row, col) stosuje się tylko do TableModels, które są podklasami AbstractTableModel. –