Podstrony
|
[ Pobierz całość w formacie PDF ]
to, że powinniśmy zastanowić się nad implementacją własnego modelu tabeli. Implementacja własnego modelu tabeli nie jest trudna, ponieważ wykorzystać możemy klasę , która dostarcza implementacji większości potrzebnych metod. Sami zaimplementować musimy jedynie trzy poniższe metody: Istnieje wiele sposobów implementacji metody . Możemy po prostu wyliczyć odpowiednią wartość na żądanie lub pobrać konkretną wartość z bazy danych. Przyjrzyjmy się kilku przykładom. W pierwszym z nich tabela zawierać będzie wartości, które wyliczy program. Będą one przedstawiać wzrost inwestycji w różnych scenariuszach (patrz rysunek 6.28). Rysunek 6.28. Tabela reprezentująca wzrost inwestycji Metoda wyznacza odpowiednią wartość i formatuje ją: 438 Java 2. Techniki zaawansowane Metody i zwracają odpowiednio liczbę wierszy i kolumn tabeli. Jeśli nie podamy nazw kolumn, to metoda klasy nazwie kolejne kolumny A, B, C itd. Aby zmienić nazwy kolumn, zastąpimy metodę i wykorzystamy procentowy przyrost inwestycji jako nazwę kolumn. Kompletny kod zródłowy programu zawiera listing 6.10. Listing 6.10. InvestmentTable.java
Rozdział 6. Zaawansowane możliwości pakietu Swing 439 440 Java 2. Techniki zaawansowane Prezentacja rekordów bazy danych Prawdopodobnie najczęściej reprezentowaną przez komponent tabeli informacją jest zbiór rekordów pochodzących z bazy danych. Korzystając ze środowiska tworzenia aplikacji, dysponujemy prawie zawsze gotowymi komponentami JavaBeans dla wykorzystania bazy danych. Warto jednak zobaczyć, w jaki sposób sami prezentować możemy za pomocą ta- beli dane z bazy i temu zadaniu służy kolejny przykład. Rysunek 6.29 pokazuje efekt jego działania wynik zapytania o wszystkie rekordy wybranej tabeli bazy danych. Rysunek 6.29. Prezentacja wyniku zapytania za pomocą tabeli Przykładowy program definiuje własny model danych za pomocą klasy , który pobiera dane będące wynikiem zapytania do bazy danych. (Rozdział 4. poświę- cony jest dostępowi do baz danych w języku Java). Liczbę kolumn i ich nazwy uzyskujemy, korzystając z obiektu reprezentującego meta- dane opisujące zbiór rekordów:
Rozdział 6. Zaawansowane możliwości pakietu Swing 441 Jeśli baza danych dysponuje przewijalnymi kursorami, to wartość komórki możemy uzy- skać bardzo łatwo, przesuwając kursor do danego wiersza i pobierając wartość kolumny. Wykorzystanie w tym przypadku własnego modelu danych zamiast domyślnego modelu posiada szczególny sens. Jeśli utworzylibyśmy własną tablicę wartości, to niepotrzebnie duplikowalibyśmy zawartość bufora sterownika bazy danych. Jeśli baza danych nie dysponuje przewijalnymi kursorami lub korzystamy ze sterownika zgodnego ze specyfikacją JDBC 1, to sami musimy buforować wynik zapytania. Program ukazany w przykładzie umożliwia zarządzanie takim buforem. Klasa buforuje wynik zapytania, natomiast klasa wyko- rzystuje przewijalny kursor. Funkcjonalność wspólną dla obu klas wyodrębniliśmy w klasie . Listing 6.11. ResultSetTable.java 442 Java 2. Techniki zaawansowane
Rozdział 6. Zaawansowane możliwości pakietu Swing 443 444 Java 2. Techniki zaawansowane
Rozdział 6. Zaawansowane możliwości pakietu Swing 445 446 Java 2. Techniki zaawansowane
Rozdział 6. Zaawansowane możliwości pakietu Swing 447 Filtry sortujące Dwa ostatnie przykłady wykazały, że tabele nie przechowują pokazywanych za ich pomocą danych, lecz pobierają je, korzystając z modelu. Także i model nie musi przechowywać da- nych może wyliczać ich wartości na żądania lub pobierać je z bazy danych. Wprowadzimy teraz kolejny przydatny mechanizm zwany modelem filtra, który umożliwia prezentację informacji danej tablicy w innej formie. W naszym przykładzie forma ta pole- gać będzie na posortowaniu wierszy tabeli. Po uruchomieniu programu, którego tekst zró- dłowy zawiera listing 6.12, spróbujmy kliknąć dwukrotnie jedną z kolumn tabeli. Spowo- duje to uporządkowanie tabeli według wartości wybranej kolumny (patrz rysunek 6.30). Rysunek 6.30. Sortowanie wierszy tabeli 448 Java 2. Techniki zaawansowane Sortowanie tabeli nie powoduje jednak uporządkowania danych modelu. Za posortowanie danych odpowiedzialny jest bowiem model filtra. Przechowuje on referencję do modelu tabeli. Gdy komponent tabeli pobiera wiersz do pre- zentacji, to model filtra wyznacza rzeczywisty wiersz tabeli i pobiera go z modelu tabeli. Oto przykład Wywołania pozostałych metod przekazywane są po prostu do oryginalnego modelu tabeli. Rysunek 6.31 pokazuje sposób, w jaki model filtra współdziała z obiektem klasy i rzeczywistym modelem tabeli. Rysunek 6.31. Model filtra tabeli Z implementacją takiego filtra związane są dwa zagadnienia. Po pierwsze, gdy użytkownik kliknie dwukrotnie jedną z kolumn, to model filtra musi otrzymać informację o tym. Nie będziemy omawiać związanych z tym szczegółów implementacji. Odpowiedni kod odnaj- dziemy wewnątrz metody klasy w tekście listingu 6.12. Działa on w następujący sposób. Najpierw pobieramy komponent nagłówka tabeli i doda- jemy do niego obiekt nasłuchujący zdarzeń związanych z myszą. Kiedy wykryje on dwu- krotne kliknięcie, musi uzyskać informację o kolumnie, której ono dotyczy. Następnie
[ Pobierz całość w formacie PDF ]
zanotowane.pldoc.pisz.plpdf.pisz.plkskarol.keep.pl
|