Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00063 007776 10468586 na godz. na dobę w sumie
Java 2. Techniki zaawansowane - książka
Java 2. Techniki zaawansowane - książka
Autor: , Liczba stron: 1128
Wydawca: Helion Język publikacji: polski
ISBN: 83-7197-985-1 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> java - programowanie
Porównaj ceny (książka, ebook, audiobook).
Przewodnik po zaawansowanych metodach programowania w Javie dla zaawansowanych programistów.

Książka ta dostarcza doświadczonym programistom rozwiązań niezbędnych do pełnego wykorzystania możliwości Javy. To praktyczny przewodnik ułatwiający rozwiązywanie nawet najbardziej złożonych problemów programistycznych. Dodatkowo zawiera zupełnie nowy rozdział poświęcony wykorzystaniu języka XML w programach pisanych w Javie oraz zaktualizowane omówienie wielu zaawansowanych możliwości tej platformy -- od kolekcji po metody macierzyste, od bezpieczeństwa po bibliotekę Swing.

Autorzy identyfikują problemy najczęściej napotykane przez doświadczonych programistów Javy i dostarczają przemyślanych rozwiązań zilustrowanych przykładami kodu, które uczyniły z tej książki prawdziwy bestseller. Dzięki niej ujrzysz w nowym świetle zagadnienia interfejsu ODBC™, tworzenia aplikacji sieciowych, wykorzystania zdalnych obiektów i wiele innych.

Najważniejsze informacje dla programistów Java:

Książka będzie dla Ciebie kolejnym krokiem w poznaniu możliwości Javy. Jest rozszerzeniem i doskonałym uzupełnieniem publikacji 'Java 2. Postawy'.

O autorach:
CAY S. HORSTMANN wykłada informatykę na uniwersytecie stanowym w San Jose. Napisał sześć książek o C++, Javie i programowaniu zorientowanym obiektowo. Jest redaktorem naczelnym bestselerowego cyklu Core Series, wydawnictwa Prentice Hall PTR.

GARY CORNELL zrobił doktorat na uniwersytecie Brown i współpracował z IBM Watson Labs. Jest autorem lub współautorem 20 książek oraz wielu artykułów, wydrukowanych w czasopismach komputerowych. Obecnie kieruje programem Modern Visual Programming na Uniwersytecie Connecticut.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl Java 2. Techniki zaawansowane Autorzy: Cay S. Horstmann, Gary Cornell T³umaczenie: Jaromir Senczyk ISBN: 83-7197-985-1 Tytu³ orygina³u: Core Java 2 Volume 2 Advanced Features Format: B5, stron: 1122 Ksi¹¿ka ta dostarcza doġwiadczonym programistom rozwi¹zañ niezbêdnych do pe³nego wykorzystania mo¿liwoġci Javy. To praktyczny przewodnik u³atwiaj¹cy rozwi¹zywanie nawet najbardziej z³o¿onych problemów programistycznych. Dodatkowo zawiera zupe³nie nowy rozdzia³ poġwiêcony wykorzystaniu jêzyka XML w programach pisanych w Javie oraz zaktualizowane omówienie wielu zaawansowanych mo¿liwoġci tej platformy — od kolekcji po metody macierzyste, od bezpieczeñstwa po bibliotekê Swing. Autorzy identyfikuj¹ problemy najczêġciej napotykane przez doġwiadczonych programistów Javy i dostarczaj¹ przemyġlanych rozwi¹zañ zilustrowanych przyk³adami kodu, które uczyni³y z tej ksi¹¿ki prawdziwy bestseller. Dziêki niej ujrzysz w nowym ġwietle zagadnienia interfejsu ODBC™, tworzenia aplikacji sieciowych, wykorzystania zdalnych obiektów i wiele innych. Najwa¿niejsze informacje dla programistów Java: • Zaktualizowane omówienie wielow¹tkowoġci, kolekcji i aplikacji sieciowych. • Zmienione przedstawienie problematyki zdalnych obiektów. • Nowe, zaawansowane techniki wykorzystania architektury komponentów JavaBeans™. • Zaawansowane techniki tworzenia interfejsu u¿ytkownika wykorzystuj¹ce biblioteki Swing i AWT. Ksi¹¿ka bêdzie dla Ciebie kolejnym krokiem w poznaniu mo¿liwoġci Javy. Jest rozszerzeniem i doskona³ym uzupe³nieniem publikacji „Java 2. Postawy”. Spis treści Podziękowania...................................................n...................................................n..........................9 Przedmowa ...................................................n...................................................n............................. 11 ...... 11 ......... 11 Do Czytelnika ...................................................n...................................................n............ O książce..........................................n...................................................n......................... Rozdział 1. Wielowątkowość ...................................................n........................................................15 Czym są wątki? ...................................................n...................................................n............... 16 Zastosowanie wątków...................................................n...................................................n 21 Uruchamianie i wykonywanie wątków...................................................n............................ 22 Wykonywanie wielu wątków...................................................n........................................... 27 Interfejs Runnable ...................................................n...................................................n..... 28 Przerywanie wątków...................................................n...................................................n....... Właściwości wątków ...................................................n...................................................n....... .. 30 . 32 Stany wątków...................................................n...................................................n.............32 Odblokowanie wątku...................................................n...................................................n.. 35 Wątki martwe.......................................n...................................................n.........................35 Wątki-demony ...................................................n...................................................n............ 36 Grupy wątków ...................................................n...................................................n............ 36 Priorytety wątków...................................................n...................................................n............. 38 .... 45 Wątki egoistyczne...................................................n...................................................n........ Synchronizacja ...................................................n...................................................n........... ..... 51 Komunikacja między wątkami bez synchronizacji...................................................n.......... 51 Synchronizacja dostępu do współdzielonych zasobów ...................................................n.. 55 Blokady obiektów...................................................n...................................................n....... 60 Metody wait i notify...................................................n...................................................n.... 61 Bloki synchronizowane...................................................n.................................................. 66 Synchronizowane metody statyczne...................................................n.............................. 67 Zakleszczenia...................................................n...................................................n............ ...... 68 Dlaczego metody stop i suspend nie są zalecane? ...................................................n...... 71 Limity czasu...................................................n...................................................n............... 76 Programowanie interfejsu użytkownika przy użyciu wątków...................................................n. 77 . 77 Wątki i Swing ...................................................n...................................................n............ Animacja...................................................n...................................................n................. ... 85 Liczniki czasu.....................................n...................................................n........................... 91 Paski postępu...................................................n...................................................n............94 Monitory postępu...................................................n...................................................n....... 99 Monitorowanie postępu strumieni wejścia ...................................................n.................. 103 Zastosowanie potoków do komunikacji pomiędzy wątkami ................................................. 109 4 Java 2. Techniki zaawansowane Rozdział 2. Kolekcje ...................................................n...................................................n............... 115 Interfejsy kolekcji...................................................n...................................................n........... 115 Rozdzielenie interfejsów kolekcji od ich implementacji .................................................. 116 Interfejsy Collection i Iterator w bibliotekach języka Java............................................... 118 . 123 Kolekcje konkretne...................................................n...................................................n....... Listy powiązane ...................................................n...................................................n....... 123 Klasa ArrayList...................................................n...................................................n......... 132 Zbiory z kodowaniem mieszającym ...................................................n............................. 132 Zbiory drzewiaste...................................................n...................................................n..... 139 Mapy................................................n...................................................n........................ Specjalizowane klasy map ...................................................n.......................................... 150 ... 145 Szkielet kolekcji...................................n...................................................n............................. 155 Widoki i opakowania ...................................................n...................................................n 158 Operacje masowe ...................................................n...................................................n.... 164 Wykorzystanie biblioteki kolekcji z tradycyjnymi bibliotekami ......................................... 165 Algorytmy...........................................n...................................................n............................... 166 Sortowanie i tasowanie...................................................n............................................... 167 Wyszukiwanie binarne...................................................n................................................. 170 Proste algorytmy ...................................................n...................................................n...... 171 Programowanie własnych algorytmów ...................................................n......................... 173 Tradycyjne kolekcje ...................................................n...................................................n....... 174 Klasa Hashtable ...................................................n...................................................n...... 174 Wyliczenia...................................................n...................................................n............... Zbiory właściwości ...................................................n...................................................n... 176 Stosy ...................................................n...................................................n.................... ... 182 Zbiory bitów ...................................................n...................................................n.............182 . 175 Rozdział 3. Programowanie aplikacji sieciowych...................................................n.......................187 Połączenia z serwerem...................................................n...................................................n.. 188 Implementacja serwerów...................................................n.................................................. 191 Obsługa wielu klientów ...................................................n............................................... 194 Wysyłanie poczty elektronicznej...................................................n........................................ 197 Zaawansowane programowanie przy użyciu gniazdek sieciowych ........................................ 202 Połączenia wykorzystujące URL ...................................................n........................................ 207 URL i URI ...................................................n...................................................n................ . 208 Zastosowanie klasy URLConnection do pobierania informacji ....................................... 210 Wysyłanie danych do formularzy ...................................................n....................................... 219 Skrypty CGI i serwlety ...................................................n................................................. 219 Wysyłanie danych do serwera stron internetowych ...................................................n..... 221 Zbieranie informacji w sieci Internet...................................................n................................. 227 Bezpieczeństwo apletów...................................................n............................................. 233 Serwery proxy ...................................................n...................................................n.......... 236 Testowanie apletu prognozy pogody ...................................................n........................... 243 Rozdział 4. Połączenia do baz danych: JDBC ...................................................n..............................247 .. 248 Architektura JDBC...................................................n...................................................n........ Typowe zastosowania JDBC ...................................................n........................................ 251 Język SQL ...................................................n...................................................n................ Instalacja JDBC ...................................................n...................................................n.......... Podstawowe koncepcje programowania przy użyciu JDBC ...................................................n 258 Adresy URL baz danych...................................................n............................................... 259 Nawiązywanie połączenia...................................................n............................................ 259 ...... 252 ... 258 Spis treści 5 Wykonywanie poleceń języka SQL ...................................................n............................... 264 Zaawansowane typy języka SQL (JDBC 2) ...................................................n................... 266 Wypełnianie bazy danych ...................................................n............................................ 268 Wykonywanie zapytań...................................................n...................................................n.... 272 Przewijalne i aktualizowalne zbiory wyników zapytań ...................................................n........ 282 Przewijalne zbiory rekordów (JDBC 2) ...................................................n.......................... 283 Aktualizowalne zbiory rekordów (JDBC 2) ...................................................n.................... 286 Metadane...................................................n...................................................n................. Transakcje..........................................n...................................................n........................ ..... 290 ...... 300 Aktualizacje wsadowe (JDBC 2)..................................................n.................................... 301 Zaawansowane zarządzanie połączeniami...................................................n........................ 302 Rozdział 5. Obiekty zdalne ...................................................n........................................................305 Wprowadzenie do problematyki obiektów zdalnych: role klienta i serwera ..................... 306 Wywołania zdalnych metod (RMI)..................................................n....................................... 308 Namiastka i szeregowanie parametrów ...................................................n...................... 309 Dynamiczne ładowanie klas ...................................................n........................................ 311 Konfiguracja wywołania zdalnych metod ...................................................n........................... 311 Interfejsy i implementacje...................................................n........................................... 312 Odnajdywanie obiektów serwera ...................................................n................................. 315 Po stronie klienta...................................................n...................................................n..... 319 Przygotowanie wdrożenia ...................................................n............................................ 323 Wdrożenie programu ...................................................n...................................................n 326 Przekazywanie parametrów zdalnym metodom ...................................................n................. 326 Przekazywanie lokalnych obiektów ...................................................n.............................. 326 Przekazywanie zdalnych obiektów ...................................................n............................... 338 Wykorzystanie zdalnych obiektów w zbiorach...................................................n.............. 341 Klonowanie zdalnych obiektów...................................................n.................................... 342 Niewłaściwe zdalne parametry...................................................n.................................... 343 Wykorzystanie RMI w apletach ...................................................n......................................... 344 Aktywacja obiektów serwera...................................................n............................................. 348 Java IDL i CORBA...................................................n...................................................n......... Język IDL.............................................n...................................................n...................... Przykład aplikacji CORBA ...................................................n............................................ 361 Implementacja serwerów CORBA ...................................................n................................ 370 .. 355 .. 356 Rozdział 6. Zaawansowane możliwości pakietu Swing ...................................................n..............377 ........... 377 Listy..............................................n...................................................n......................... Komponent JList ...................................................n...................................................n...... 378 Modele list...................................................n...................................................n.............. Wstawianie i usuwanie ...................................................n............................................... 387 Odrysowywanie zawartości listy...................................................n................................... 389 . 382 Drzewa ...................................................n...................................................n................... ....... 394 Najprostsze drzewa...................................................n...................................................n.. 395 Przeglądanie węzłów ...................................................n...................................................n 410 Rysowanie węzłów ...................................................n...................................................n... 412 Nasłuchiwanie zdarzeń w drzewach ...................................................n............................ 419 Własne modele drzew...................................................n................................................. 425 Tabele ...................................................n...................................................n................... ........ 433 Najprostsze tabele...................................................n...................................................n... 433 Modele tabel...................................................n...................................................n............ 437 Filtry sortujące ...................................................n...................................................n.........447 6 Java 2. Techniki zaawansowane Rysowanie i edytowanie zawartości komórek...................................................n.............. 454 Operacje na wierszach i kolumnach...................................................n............................ 469 Wybór wierszy, kolumn i komórek ...................................................n............................... 470 Komponenty formatujące tekst ...................................................n........................................ 478 Organizatory komponentów ...................................................n.............................................. 484 Panele dzielone ...................................................n...................................................n....... 485 Panele z zakładkami ...................................................n...................................................n 489 Panele pulpitu i ramki wewnętrzne...................................................n.............................. 494 Rozmieszczenie kaskadowe i sąsiadujące...................................................n.................. 497 Zgłaszanie weta do zmiany właściwości...................................................n...................... 500 Rozdział 7. Zaawansowane możliwości biblioteki AWT ...................................................n...............513 Potokowe tworzenie grafiki ...................................................n............................................... 514 Figury..............................................n...................................................n........................ .......... 516 Wykorzystanie klas obiektów graficznych ...................................................n.................... 518 Pola ...................................................n...................................................n..................... Ślad pędzla ...................................................n...................................................n.............. Wypełnienia...................................................n...................................................n.............. Przekształcenia układu współrzędnych ...................................................n............................. 549 Przycinanie ...................................................n...................................................n.............. Przezroczystość i składanie obrazów ...................................................n................................ 562 Wskazówki operacji graficznych...................................................n........................................ 570 Czytanie i zapisywanie plików graficznych...................................................n......................... 575 .......... 531 ..... 535 ..... 543 ...... 557 Wykorzystanie obiektów zapisu i odczytu plików graficznych.......................................... 576 Odczyt i zapis plików zawierających sekwencje obrazów ................................................ 578 Operacje na obrazach...................................................n...................................................n.... 588 Dostęp do danych obrazu ...................................................n........................................... 588 Filtrowanie obrazów ...................................................n...................................................n. 595 Drukowanie ...................................................n...................................................n............... .... 604 Drukowanie grafiki ...................................................n...................................................n... 604 Drukowanie wielu stron...................................................n............................................... 614 Podgląd wydruku...................................................n...................................................n...... 616 Usługi drukowania ...................................................n...................................................n... 625 Usługi drukowania za pośrednictwem strumieni ...................................................n......... 631 Atrybuty drukowania...................................................n...................................................n. 636 Schowek............................................n...................................................n......................... ...... 643 Klasy i interfejsy umożliwiające przekazywanie danych .................................................. 644 Przekazywanie tekstu...................................................n.................................................. 644 Interfejs Transferable i formaty danych...................................................n....................... 649 Przekazywanie obrazów za pomocą schowka ...................................................n.............. 651 Wykorzystanie lokalnego schowka do przekazywania referencji obiektów ...................... 656 Wykorzystanie schowka systemowego do przekazywania obiektów Java ....................... 662 Mechanizm „przeciągnij i upuść”...................................................n...................................... 666 Cele mechanizmu „przeciągnij i upuść” ...................................................n...................... 668 Źródła mechanizmu „przeciągnij i upuść” ...................................................n................... 677 Przekazywanie danych pomiędzy komponentami Swing ................................................. 683 Rozdział 8. JavaBeans................................n...................................................n..............................687 . 688 Dlaczego ziarnka? ...................................................n...................................................n........ Proces tworzenia ziarnek JavaBeans ...................................................n................................ 689 Wykorzystanie ziarnek do tworzenia aplikacji...................................................n.................... 693 Umieszczanie ziarnek w plikach JAR ...................................................n........................... 694 Korzystanie z ziarnek ...................................................n.................................................. 696 Spis treści 7 Wzorce nazw właściwości ziarnek i zdarzeń...................................................n...................... 701 Typy właściwości ziarnek ...................................................n.................................................. 703 Właściwości proste ...................................................n...................................................n.. 703 Właściwości indeksowane ...................................................n.......................................... 704 Właściwości powiązane ...................................................n.............................................. 705 Właściwości ograniczone ...................................................n............................................ 711 Tworzenie własnych zdarzeń związanych z ziarnkami...................................................n........ 721 Edytory właściwości ...................................................n...................................................n...... . 727 Implementacja edytora właściwości ...................................................n............................ 735 Klasa informacyjna ziarnka...................................................n............................................... 749 Klasa FeatureDescriptor ...................................................n............................................. 751 Indywidualizacja ziarnka ...................................................n...................................................n 758 Implementacja klasy indywidualizacji ...................................................n.......................... 760 Kontekst ziarnka ...................................................n...................................................n......... .. 768 Zaawansowane zastosowanie introspekcji...................................................n.................. 768 Odnajdywanie ziarnek siostrzanych...................................................n............................. 771 Korzystanie z usług kontekstu ziarnka ...................................................n........................ 773 Rozdział 9. Bezpieczeństwo............................n...................................................n..........................783 ... 784 Ładowanie klas...................................................n...................................................n........... Implementacja własnej procedury ładującej...................................................n................ 787 Weryfikacja kodu maszyny wirtualnej...................................................n................................ 794 Menedżery bezpieczeństwa i pozwolenia...................................................n.......................... 799 Bezpieczeństwo na platformie Java 2 ...................................................n......................... 801 Pliki polityki bezpieczeństwa...................................................n....................................... 806 Tworzenie własnych klas pozwoleń ...................................................n............................. 813 Implementacja klasy pozwoleń ...................................................n................................... 814 Tworzenie własnych menedżerów bezpieczeństwa...................................................n...... 820 Uwierzytelnianie użytkowników...................................................n.................................... 828 Podpis cyfrowy.......................................n...................................................n....................... .... 834 Skróty wiadomości...................................................n...................................................n... 834 Podpisywanie wiadomości ...................................................n.......................................... 840 Uwierzytelnianie wiadomości ...................................................n...................................... 847 Certyfikaty X.509 ...................................................n...................................................n..... 849 Tworzenie certyfikatów...................................................n................................................ 851 Podpisywanie certyfikatów ...................................................n.......................................... 854 Podpisywanie kodu...................................................n...................................................n........861 Podpisywanie plików JAR ...................................................n............................................ 862 Wskazówki dotyczące wdrożenia...................................................n................................. 866 Certyfikaty twórców oprogramowania ...................................................n.......................... 867 Szyfrowanie ...................................................n...................................................n.............. ..... 868 Szyfrowanie symetryczne ...................................................n............................................ 869 Szyfrowanie kluczem publicznym ...................................................n................................ 875 Strumienie szyfrujące ...................................................n................................................. 880 Rozdział 10. Internacjonalizacja...................................................n................................................883 ...... 884 Lokalizatory ...................................................n...................................................n............. Liczby i waluty ...................................................n...................................................n............... 890 ...... 896 Data i czas ...................................................n...................................................n.............. Tekst ...................................................n...................................................n.................... ......... 903 Porządek alfabetyczny...................................................n................................................. 903 Granice tekstu ...................................................n...................................................n......... 910 8 Java 2. Techniki zaawansowane Formatowanie komunikatów ...................................................n....................................... 916 Formatowanie z wariantami ...................................................n........................................ 920 Konwersje zbiorów znaków ...................................................n......................................... 924 Internacjonalizacja a pliki źródłowe programów...................................................n........... 925 Zasoby ...................................................n...................................................n................... ....... 926 Lokalizacja zasobów ...................................................n...................................................n 927 Tworzenie klas zasobów ...................................................n............................................. 928 Lokalizacja graficznego interfejsu użytkownika ...................................................n................. 931 Lokalizacja apletu ...................................................n...................................................n.... 934 Rozdział 11. Metody macierzyste ...................................................n...............................................951 Wywołania funkcji języka C z programów w języku Java ...................................................n.... 953 Wykorzystanie funkcji printf..................................................n.......................................... 954 Numeryczne parametry metod i wartości zwracane ...................................................n.......... 959 Wykorzystanie funkcji printf do formatowania liczb ...................................................n..... 959 Łańcuchy znaków jako parametry ...................................................n..................................... 961 Wywołanie funkcji sprintf przez metodę macierzystą...................................................n... 964 Dostęp do składowych obiektu...................................................n......................................... 966 Dostęp do statycznych składowych klasy ...................................................n......................... 969 Sygnatury ...................................................n...................................................n................ Wywoływanie metod języka Java...................................................n....................................... 973 Wywoływanie metod obiektów...................................................n..................................... 973 Wywoływanie metod statycznych...................................................n................................. 976 Konstruktory ...................................................n...................................................n............ 977 Alternatywne sposoby wywoływania metod ...................................................n................. 977 ...... 971 Tablice.............................................n...................................................n........................ Obsługa błędów...................................................n...................................................n........... Interfejs programowy wywołań języka Java ...................................................n....................... 989 Kompletny przykład: dostęp do rejestru systemu Windows ................................................. 992 ......... 980 .. 984 Rejestr systemu Windows...................................................n........................................... 992 Interfejs dostępu do rejestru na platformie Java...................................................n......... 994 Implementacja dostępu do rejestru za pomocą metod macierzystych ........................... 995 Rozdział 12. Język XML ...................................................n...................................................n........1009 Wprowadzenie do języka XML...................................................n......................................... 1010 Struktura dokumentu XML ...................................................n........................................ 1012 Parsowanie dokumentów XML...................................................n........................................ 1015 Definicje typów dokumentów ...................................................n.......................................... 1026 Praktyczny przykład ...................................................n...................................................n 1034 Przestrzenie nazw...................................................n...................................................n........1046 Wykorzystanie parsera SAX ...................................................n............................................ 1048 Tworzenie dokumentów XML ...................................................n.......................................... 1053 Przekształcenia XSL ...................................................n...................................................n.... 1061 Skorowidz...................................................n...................................................n...........................1073 6 Zaawansowane możliwości pakietu Swing W tym rozdziale: n Listy. n Drzewa. n Tabele. n Komponenty formatujące tekst. n Organizatory komponentów. W rozdziale tym kontynuować będziemy rozpoczęte w książce Java 2. Podstawy omówienie pakietu Swing wykorzystywanego do tworzenia interfejsu użytkownika. Pakiet Swing posiada bardzo rozbudowane możliwości, a w książce Java 2. Podstawy zdołaliśmy przedstawić jedy- nie komponenty najczęściej używane. Większość niniejszego rozdziału poświęcimy złożonym komponentom, takim jak listy, drzewa i tabele. Komponenty umożliwiające formatowanie tek- stu, na przykład HTML, posiadają jeszcze bardziej złożoną implementację. Omówimy sposób ich praktycznego wykorzystania. Rozdział zakończymy przedstawieniem organizatorów kom- ponentów, takich jak panele z zakładkami i panele z wewnętrznymi ramkami. Listy Prezentując użytkownikowi zbiór elementów do wyboru, możemy skorzystać z różnych kom- ponentów. Jeśli zbiór ten zawierać będzie wiele elementów, to ich przedstawienie za pomocą pól wyboru zajmie zdecydowanie za dużo miejsca w oknie programu. Skorzystamy wtedy zwykle z listy bądź listy rozwijalnej. Listy rozwijalne są stosunkowo prostymi komponentami i dlatego omówiliśmy je już w książce Java 2. Podstawy. Natomiast listy reprezentowane przez komponent ,.KUV posiadają dużo większe możliwości, a sposób ich użycia przypomina korzystanie z innych złożonych komponentów, takich jak drzewa czy tabele. Dlatego właśnie od list rozpoczniemy omówienie złożonych komponentów pakietu Swing. 378 Java 2. Techniki zaawansowane Listy często składają się z łańcuchów znaków, ale w praktyce zawierać mogą dowolne obiekty i kontrolować przy tym sposób ich prezentacji. Wewnętrzna architektura listy, która umożli- wia taki stopień ogólności, prezentuje się dość elegancko. Niestety projektanci z firmy Sun postanowili pochwalić się elegancją tworzonych rozwiązań, zamiast ukryć ją przed programi- stami korzystającymi z komponentu. Skutkiem tego posługiwanie się listami w najprostszych przypadkach jest trochę skomplikowane, ponieważ programista musi manipulować mechani- zmami, które umożliwiają wykorzystanie list w bardziej złożonych przypadkach. Omówienie rozpoczniemy od przedstawienia najprostszego i najczęściej spotykanego zastosowania tego komponentu — listy, której elementami są łańcuchy znaków. Później przejdziemy do bardziej złożonych przykładów ilustrujących uniwersalność komponentu. Komponent JList Zastosowanie komponentu ,.KUV przypomina użycie zbioru komponentów, takich jak przy- ciski lub pola wyboru. Różnica polega na tym, że elementy listy umieszczone są we wspól- nej ramce, a wyboru dokonuje się, wskazując dany element, a nie związane z nim pole bądź przycisk. Użytkownik może też wybrać wiele elementów listy, jeśli pozwolimy na to. Rysunek 6.1 pokazuje najprostszy przykład listy. Użytkownik może z niej wybrać atrybuty opisujące lisa, takie jak „quick”, „brown”, „hungry” i „wild” oraz, z braku innych pomy- słów, „static”, „private” i „final”. Rysunek 6.1. Komponent klasy JList Tworzenie listy rozpoczynamy od skonstruowania tablicy łańcuchów znaków, którą na- stępnie przekazujemy konstruktorowi klasy ,.KUV: 5VTKPI=?YQTFU]SWKEMDTQYPJWPIT[YKNFY_ ,.KUVYQTF.KUVPGY,.KUV YQTFU  Możemy wykorzystać w tym celu także anonimową tablicę: ,.KUVYQTF.KUVPGY,.KUV PGY5VTKPI=? ]SWKEMDTQYPJWPIT[YKNF_  Komponenty ,.KUV nie przewijają automatycznie swojej zawartości. W tym celu musimy umieścić listę w panelu przewijalnym: ,5ETQNN2CPGUETQNN2CPGPGY,5ETQNN2CPG YQTF.KUV  Rozdział 6. n Zaawansowane możliwości pakietu Swing 379 Panel ten, a nie listę, umieszczamy następnie na docelowym panelu okna. Rozdzielenie prezentacji listy od mechanizmu przewijania jest z pewnością rozwiązaniem eleganckim, ale mało praktycznym. Właściwie prawie wszystkie listy wymagają przewija- nia. Zmuszanie programistów, by za każdym razem, gdy tworzą najprostszą listę, podzi- wiali działanie tego mechanizmu, jest okrutne. Domyślnie lista mieści osiem elementów widocznych jednocześnie. Możemy to zmienić, korzystając z metody UGV8KUKDNG4QY QWPV: YQTF.KUVUGV8KUKDNG4QY QWPV  RQMCWLGLGFPQEGħPKGGYNGOGPVÎY Domyślnie użytkownik może wybierać wiele elementów listy. Wymaga to od niego za- awansowanego posługiwania się myszą: wybierając kolejne elementy, musi jednocześnie wciskać klawisz Ctrl. Aby wytypować pewien ciągły zakres elementów, użytkownik po- winien zaznaczyć pierwszy z nich a następnie, wciskając klawisz Shift, wybrać ostatni z elementów. Możliwość wyboru elementów przez użytkownika możemy ograniczyć, korzystając z me- tody UGV5GNGEVKQP/QFG: YQTF.KUVUGV5GNGEVKQP/QFG  .KUV5GNGEVKQP/QFGN5+0). A5 . 6+10  OQľNKYQħèY[DQTWRQLGF[PEGIQGNGOGPVW YQTF.KUVUGV5GNGEVKQP/QFG  .KUV5GNGEVKQP/QFGN5+0). A+06 48#.A5 . 6+10  OQľNKYQħèY[DQTWRQLGF[PEGIQGNGOGPVWNWDRQLGF[PEGIYQCMTGUWGNGOGPVÎY Z lektury książki Java 2. Podstawy przypominamy sobie z pewnością, że podstawowe ele- menty interfejsu użytkownika generują zdarzenia akcji w momencie ich aktywacji przez użytkownika. Listy wykorzystują jednak inny mechanizm powiadomień. Zamiast nasłu- chiwać zdarzeń akcji, w przypadku list nasłuchiwać będziemy zdarzeń wyboru na liście. W tym celu musimy dodać do komponentu listy obiekt nasłuchujący wyboru i zaimple- mentować następującą metodę obiektu nasłuchującego: RWDNKEXQKFXCNWG JCPIGF .KUV5GNGEVKQP XGPVGXV Podczas dokonywania wyboru na liście generuje się sporo zdarzeń. Załóżmy na przykład, że użytkownik przechodzi do kolejnego elementu listy. Gdy naciska klawisz myszy, gene- rowane jest zdarzenie zmiany wyboru na liście. Zdarzenie to jest przejściowe i wywołanie metody GXGPVKU#FLWUVKPI zwraca wartość VTWG, gdy wybór nie jest ostateczny. Gdy użytkownik puszcza klawisz my- szy, generowane jest kolejne zdarzenie, dla którego wywołanie metody KU#FLWUVKPI zwróci tym razem wartość HCNUG. Jeśli nie jesteśmy zainteresowani przejściowymi zdarzeniami na liście, to wystarczy poczekać jedynie na zdarzenie, dla którego metoda KU#FLWUVKPI zwróci właśnie wartość HCNUG. W przeciwnym razie musimy obsługiwać wszystkie zdarzenia. Zwykle po zawiadomieniu o zdarzeniu będziemy chcieli się dowiedzieć, które elementy zo- stały wybrane. Metoda IGV5GNGEVGF8CNWGU zwraca tablicę obiektów zawierającą wybrane elementy. 380 Java 2. Techniki zaawansowane Każdy z jej elementów musimy rzutować na łańcuch znaków. 1DLGEV=?XCNWGUNKUVIGV5GNGEVGF8CNWGU  HQT KPVKKXCNWGUNGPIVJK RTGVYCTCPKGGNGOGPVÎYRQUVCEK 5VTKPI XCNWGU=K? Nie możemy rzutować tablicy 1DLGEV=? zwróconej przez metodę IGV5GNGEVGF8CNWGU na tablicę 5VTKPI=?. Zwracana przez metodę tablica została utworzona nie jako tablica łańcuchów znaków, ale jako tablica obiektów, z których każdy jest akurat łańcuchem znaków. Jeśli chcemy przetwarzać zwróconą tablicę jako tablicę łańcuchów znaków, to powinniśmy skorzystać z poniższego kodu: KPVNGPIVJXCNWGUNGPIVJ 5VTKPI=?YQTFUPGY5VTKPI=NGPIVJ? 5[UVGOCTTC[ QR[ XCNWGUYQTFUNGPIVJ  Jeśli lista nie dopuszcza wyboru wielu elementów, to możemy skorzystać z metody IGV5G NGEVGF8CNWG. Zwraca ona pierwszy element wybrany na liście. 5VTKPIUGNGEVKQP 5VTKPI UQWTEGIGV5GNGEVGF8CNWG  Listy nie obsługują dwukrotnych kliknięć myszą. Projektanci pakietu Swing założyli, że na liście dokonuje się jedynie wyboru, a następnie zaznacza się komponent przycisku, aby wykonać jakąś akcję. Niektóre interfejsy użytkownika posiadają możliwość dwu- krotnego kliknięcia elementu listy w celu dokonania jego wyboru i wykonania na nim pewnej akcji. Uważamy, że nie jest to zbyt dobry styl tworzenia interfejsu użytkownika, ponieważ wymaga, by użytkownik samodzielnie odkrył możliwość takiego jego działa- nia. Jeśli jednak z pewnych powodów chcemy skorzystać z możliwości implementacji takiego zachowania listy, to musimy dodać do niej obiekt nasłuchujący mysz i obsłu- giwać zdarzenia myszy w następujący sposób: RWDNKEXQKFOQWUG NKEMGF /QWUG XGPVGXV ] KH GXVIGV NKEM QWPV  ] ,.KUVUQWTEG ,.KUV GXVIGV5QWTEG  1DLGEV=?UGNGEVKQPUQWTEGIGV5GNGEVGF8CNWGU  FQ#EVKQP UGNGEVKQP  _ _ Listing 6.1 zawiera tekst źródłowy programu demonstrującego wykorzystanie listy wypeł- nionej łańcuchami znaków. Zwróćmy uwagę na sposób, w jaki metoda XCNWG JCPIGF two- rzy łańcuch komunikatu z wybranych elementów listy. Listing 6.1. ListTest.java KORQTVLCXCCYV  KORQTVLCXCCYVGXGPV  KORQTVLCXCZUYKPI  KORQTVLCXCZUYKPIGXGPV   2TQITCOFGOQPUVTWLæE[Y[MQT[UVCPKGNKUV[CYKGTCLæEGLđCēEWYEJ[PCMÎY  RWDNKEENCUU.KUV6GUV Rozdział 6. n Zaawansowane możliwości pakietu Swing 381 ] RWDNKEUVCVKEXQKFOCKP 5VTKPI=?CTIU ] ,(TCOGHTCOGPGY.KUV(TCOG  HTCOGUGV GHCWNV NQUG1RGTCVKQP ,(TCOG :+6A10A .15  HTCOGUJQY  _ _  4COMCCYKGTCLæECNKUVúUđÎYKGV[MKGVúRQMCWLæEæFCPKG đQľQPGY[DTCP[EJUđÎY2T[VT[OWLæEMNCYKU VTNY[DTCèYOQľPCYKGNGUđÎY CMNCYKU5JKHVRQYCNCPCY[DÎTECđGIQCMTGUWUđÎY  ENCUU.KUV(TCOGGZVGPFU,(TCOG ] RWDNKE.KUV(TCOG ] UGV6KVNG .KUV6GUV  UGV5KG 9+ 6** +)*6  5VTKPI=?YQTFU ] SWKEMDTQYPJWPIT[YKNFUKNGPV JWIGRTKXCVGCDUVTCEVUVCVKEHKPCN _ YQTF.KUVPGY,.KUV YQTFU  ,5ETQNN2CPGUETQNN2CPGPGY,5ETQNN2CPG YQTF.KUV Y ,2CPGNRPGY,2CPGN  RCFF UETQNN2CPG  YQTF.KUVCFF.KUV5GNGEVKQP.KUVGPGT PGY .KUV5GNGEVKQP.KUVGPGT ] RWDNKEXQKFXCNWG JCPIGF .KUV5GNGEVKQP XGPVGYXGPV ] 1DLGEV=?XCNWGUYQTF.KUVIGV5GNGEVGF8YCNWGU  5VTKPI$WHHGTVGZVPGY5VTKPI$WHHGT RTGHKZ Y HQT KPVKKXCNWGUNGPIVJK ] 5VTKPIYQTF 5VTKPI XCNWGU=K? VGZVCRRGPF YQTF  VGZVCRRGPF   _ VGZVCRRGPF UWHHKZ  NCDGNUGV6GZV VGZVVQ5VTKPI  _ _   QPVCKPGTEQPVGPV2CPGIGV QPVGPV2CPG  EQPVGPV2CPGCFF R$QTFGT.C[QWV5176*  NCDGNPGY,.CDGN RTGHKZ UWHHKZ  EQPVGPV2CPGCFF NCDGN$QTFGT.C[QWV 06 4  _ 382 Java 2. Techniki zaawansowane RTKXCVGUVCVKEHKPCNKPV9+ 6* RTKXCVGUVCVKEHKPCNKPV* +)*6 RTKXCVG,.KUVYQTF.KUV RTKXCVG,.CDGNNCDGN RTKXCVG5VTKPIRTGHKZ6JG RTKXCVG5VTKPIUWHHKZHQZLWORUQXGTVJGNC[FQI _ LCXCZUYKPI,.KUV n n n n n n ,.KUV 1DLGEV=?KVGOU tworzy listę wyświetlającą podane elementy. XQKFUGV8KUKDNG4QY QWPV KPVE określa liczbę elementów widocznych jednocześnie na liście (bez przewijania). XQKFUGV5GNGEVKQP/QFG KPVOQFG określa możliwość wyboru pojedynczego lub wielu elementów. Parametry: OQFG jedna z wartości 5+0). A5 . 6+10 5+0). A+06 48#.A5 . 6+10 /7.6+2. A+06 48#.A5 . 6+10. XQKFCFF.KUV5GNGEVKQP.KUVGPGT .KUV5GNGEVKQP.KUVGPGTN4KUVGPGT dodaje do listy obiekt nasłuchujący zdarzeń wyboru na liście. 1DLGEV=?IGV5GNGEVGF8CNWGU zwraca elementy wybrane na liście lub pustą tablicę, jeśli żaden element nie został wybrany. 1DLGEVIGV5GNGEVGF8CNWG zwraca pierwszy element wybrany na liście lub wartość PWNN. LCXCZUYKPIGXGPV.KUV5GNGEVKQP.KUVGPGT n XQKFXCNWG JCPIGF .KUV5GNGEVKQP XGPVG metoda wywoływana za każdym razem, gdy wybór na liście uległ zmianie. Modele list W poprzednim podrozdziale pokazaliśmy najczęściej spotykany sposób wykorzystania list polegający na: n utworzeniu niezmiennego zbioru elementów listy (łańcuchów znaków), n umożliwieniu przewijania listy, n obsłudze zdarzeń wyboru elementów listy. W dalszej części przedstawimy bardziej skomplikowane sposoby wykorzystania list, czyli: n listy o bardzo dużej liczbie elementów, n listy o zmiennej zawartości, n listy zawierające elementy inne niż łańcuchy znaków. Rozdział 6. n Zaawansowane możliwości pakietu Swing 383 W naszym pierwszym przykładzie utworzyliśmy listę zawierającą określony zbiór łańcu- chów znaków. Często jednak zachodzi potrzeba dodawania nowych elementów listy bądź usuwania elementów już umieszczonych na liście. Zaskakujący może wydać się fakt, że klasa ,.KUV nie zawiera metod umożliwiających takie operacje na liście. Aby zrozumieć te- go przyczynę, musimy zapoznać się bliżej z wewnętrzną architekturą komponentu listy. Podobnie jak w przypadku komponentów tekstowych także i lista jest przykładem zastoso- wania wzorca model-widok-nadzorca w celu oddzielenia wizualizacji listy (czyli kolumny elementów wyświetlonych w pewien sposób) od danych (kolekcji obiektów). Klasa ,.KUV odpowiedzialna jest jedynie za wizualizację danych i niewiele wie na temat ich reprezentacji. Potrafi jedynie pobrać dane, korzystając z obiektu implementującego interfejs .KUV/QFGN: RWDNKEKPVGTHCEG.KUV/QFGN ] RWDNKEKPVIGV5KG  RWDNKE1DLGEVIGV NGOGPV#V KPVK  RWDNKEXQKFCFF.KUV CVC.KUVGPGT .KUV CVC.KUVGPGTN  RWDNKEXQKFTGOQXG.KUV CVC.KUVGPGT .KUV CVC.KUVGPGTN  _ Wykorzystując ten interfejs, komponent klasy ,.KUV może określić liczbę elementów i po- brać każdy z nich. Może także dodać się jako obiekt nasłuchujący danych. Dzięki temu bę- dzie powiadamiany o każdej zmianie w kolekcji elementów i będzie mógł aktualizować re- prezentację list na ekranie. Jaki jest cel takiego rozwiązania? Dlaczego komponent ,.KUV nie przechowuje po prostu swoich elementów za pomocą wektora? Zwróćmy uwagę, że interfejs nie określa sposobu przechowywania obiektów. W szczegól- ności nie wymaga on nawet, by obiekty były przechowywane! Metoda IGV NGOGPV#V może wyznaczać wartość elementu od nowa, za każdym razem gdy jest wywoływana. Może oka- zać się to przydatne, jeśli lista prezentować ma bardzo liczną kolekcję danych, których nie chcemy przechowywać. A oto najprostszy przykład: lista umożliwiać będzie użytkownikowi wybór spośród wszyst- kich możliwych kombinacji trzech liter (patrz rysunek 6.2). Rysunek 6.2. Wybór z listy zawierającej dużą liczbę elementów 384 Java 2. Techniki zaawansowane Istnieje 26 ∗ 26 ∗ 26 = 17 576 takich kombinacji. Zamiast przechowywać je wszystkie, program będzie tworzył je podczas przewijania listy przez użytkownika. Implementacja programu okazuje się bardzo prosta. Zadanie dodania i usuwania odpo- wiednich obiektów nasłuchujących wykona za nas klasa #DUVTCEV.KUV/QFGN, którą roz- szerzymy. Naszym zadaniem będzie jedynie dostarczenie implementacji metod IGV5KG i IGV NGOGPV#V: ENCUU9QTF.KUV/QFGNGZVGPFU#DUVTCEV.KUV/QFGN ] RWDNKE9QTF.KUV/QFGN KPVP ]NGPIVJP_ RWDNKEKPVIGV5KG ]TGVWTP KPV /CVJRQY NGPIVJ Y_ RWDNKE1DLGEVIGV NGOGPV#V KPVP ] Y[PCECPV[đCēEWEJ  _  _ Wyznaczenie n-tego łańcucha jest trochę skomplikowane — szczegóły znajdziemy w tek- ście programu umieszczonym w listingu 6.2. Po utworzeniu modelu listy łatwo wykreować taką listę, która pozwoli użytkownikowi na przeglądanie wartości dostarczanych przez model: YQTF.KUVPGY,.KUV PGY9QTF.KUV/QFGN   YQTF.KUVUGV5GNGEVKQP/QFG .KUV5GNGEVKQP/QFGN5+0). A5 . 6+10 Y ,5ETQNN2CPGUETQNN2CPGPGY,5ETQNN2CPG YQTF.KUV  Zaletą programu jest to, że prezentowane na liście łańcuchy nie są nigdzie przechowywane. Generowane są jedynie elementy listy widoczne w danym momencie dla użytkownika. Musimy jeszcze dostarczyć do listy informację, że każdy z jej elementów posiada stałą sze- rokość i wysokość. YQTF.KUVUGV(KZGF GNN9KFVJ   YQTF.KUVUGV(KZGF GNN*GKIJV   W przeciwnym razie lista będzie wyznaczać te wartości dla każdego elementu, co będzie zbyt czasochłonne. W praktyce listy zawierające tak dużą liczbę elementów są rzadko przydatne, ponieważ przeglądanie ich jest kłopotliwe dla użytkownika. Dlatego też uważamy, że projektanci list pakietu Swing przesadzili nieco z ich uniwersalnością. Liczba elementów, które użytkow- nik może wygodnie przeglądać na ekranie, jest tak mała, że mogłyby one być przechowy- wane po prostu wewnątrz komponentu listy. Oszczędziłoby to programistom tworzenia modeli list. Z drugiej jednak strony zastosowane rozwiązanie sprawia, że sposób wykorzy- stania komponentu ,.KUV jest spójny ze sposobami używania komponentów ,6TGG i ,6CDNG, w przypadku których taka uniwersalność okazuje się przydatna. Rozdział 6. n Zaawansowane możliwości pakietu Swing 385 Listing 6.2. LongListTest.java KORQTVLCXCCYV  KORQTVLCXCCYVGXGPV  KORQTVLCXCZUYKPI  KORQTVLCXCZUYKPIGXGPV   2TQITCOFGOQPUVTWLæE[Y[MQT[UVCPKGNKUV[MVÎTCF[PCOKEYPKGY[PCECUYQLG GNGOGPV[  RWDNKEENCUU.QPI.KUV6GUV ] RWDNKEUVCVKEXQKFOCKP 5VTKPI=?CTIU ] ,(TCOGHTCOGPGY.QPI.KUV(TCOG  HTCOGUGV GHCWNV NQUG1RGTCVKQP ,(TCOG :+6A10A .15  HTCOGUJQY  _ _  4COMCCYKGTCLæECFđWIæNKUVúUđÎYKGV[MKGVúRQMCWLæEæFCPKG đQľQPGY[DTCP[EJUđÎY  ENCUU.QPI.KUV(TCOGGZVGPFU,(TCOG ] RWDNKE.QPI.KUV(TCOG ] UGV6KVNG .QPI.KUV6GUV  UGV5KG 9+ 6** +)*6  YQTF.KUVPGY,.KUV PGY9QTF.KUV/QFGN   YQTF.KUVUGV5GNGEVKQP/QFG  .KUV5GNGEVKQP/QFGN5+0). A5 . 6+10  YQTF.KUVUGV(KZGF GNN9KFVJ   YQTF.KUVUGV(KZGF GNN*GKIJV   ,5ETQNN2CPGUETQNN2CPGPGY,5ETQNN2CPG YQTF.KUV Y ,2CPGNRPGY,2CPGN  RCFF UETQNN2CPG  YQTF.KUVCFF.KUV5GNGEVKQP.KUVGPGT PGY .KUV5GNGEVKQP.KUVGPGT ] RWDNKEXQKFXCNWG JCPIGF .KUV5GNGEVKQP XGPVGYXV ] 5VTKPI$WHHGTYQTF  5VTKPI$WHHGT YQTF.KUVIGV5GNGEVGFY8CNWG  UGV5WDLGEV YQTFVQ5VTKPI  _ _   QPVCKPGTEQPVGPV2CPGIGV QPVGPV2CPG  EQPVGPV2CPGCFF R$QTFGT.C[QWV5176*  386 Java 2. Techniki zaawansowane NCDGNPGY,.CDGN RTGHKZ UWHHKZ  EQPVGPV2CPGCFF NCDGN$QTFGT.C[QWV 06 4  UGV5WDLGEV HQZ  _  1MTGħNCRQFOKQVFCPKCRQMC[YCPGIQCRQOQEæGV[MKGV[  RCTCOYQTFPQY[RQFOKQVFCPKC   RWDNKEXQKFUGV5WDLGEV 5VTKPIYQTF ] 5VTKPI$WHHGTVGZVPGY5VTKPI$WHHGT RTGHKZ  VGZVCRRGPF YQTF  VGZVCRRGPF UWHHKZ  NCDGNUGV6GZV VGZVVQ5VTKPI  _ RTKXCVGUVCVKEHKPCNKPV9+ 6* RTKXCVGUVCVKEHKPCNKPV* +)*6 RTKXCVG,.KUVYQTF.KUV RTKXCVG,.CDGNNCDGN RTKXCVG5VTKPIRTGHKZ6JGSWKEMDTQYP RTKXCVG5VTKPIUWHHKZLWORUQXGTVJGNC[FQI _  /QFGNNKUV[F[PCOKEPKGIGPGTWLæE[MQODKPCELGPNKVGTY  ENCUU9QTF.KUV/QFGNGZVGPFU#DUVTCEV.KUV/QFGN ]  6YQT[OQFGN  RCTCOPFđWIQħèMQODKPCELK UđQYC   RWDNKE9QTF.KUV/QFGN KPVP ]NGPIVJP_ RWDNKEKPVIGV5KG ] TGVWTP KPV /CVJRQY .#56(+456 NGPIVJ  _ RWDNKE1DLGEVIGV NGOGPV#V KPVP ] 5VTKPI$WHHGTTPGY5VTKPI$WHHGT  HQT KPVKKNGPIVJK ] EJCTE EJCT (+456 P .#56(+456   TKPUGTV E  PP .#56(+456   _ TGVWTPT _ RTKXCVGKPVNGPIVJ RWDNKEUVCVKEHKPCNEJCT(+456 C  RWDNKEUVCVKEHKPCNEJCT.#56  _ Rozdział 6. n Zaawansowane możliwości pakietu Swing 387 LCXCZUYKPI,.KUV n n n ,.KUV .KUV/QFGNFCVC/QFGN tworzy listę, która wyświetla elementy dostarczane przez określony model. XQKFUGV(KZGF GNN9KFVJ KPVYKFVJ jeśli parametr YKFVJ ma wartość większą od zera, to określa on szerokość każdej komórki listy. Wartością domyślną jest –1, co wymusza wyznaczenie rozmiarów każdej komórki z osobna. XQKFUGV(KZGF GNN*GKIJV KPVJGKIJV jeśli parametr JGKIJV ma wartość większą od zera, to określa on wysokość każdej komórki listy. Wartością domyślną jest –1, co wymusza wyznaczenie rozmiarów każdej komórki z osobna. LCXCZUYKPI.KUV/QFGN n n KPVIGV5KG zwraca liczbę elementów w danym modelu. 1DLGEVIGV NGOGPV#V KPVKPFGZ zwraca element modelu. Wstawianie i usuwanie Kolekcji elementów listy nie możemy modyfikować bezpośrednio. Operacje te możemy wykonywać jedynie za pośrednictwem modelu. Załóżmy, że chcemy umieścić na liście ko- lejne elementy. Najpierw pobierzemy referencję odpowiedniego modelu: .KUV/QFGNOQFGNNKUVIGV/QFGN  Jednak interfejs .KUV/QFGN nie zawiera metod umożliwiających wstawianie i usuwanie ele- mentów, ponieważ nie wymaga on przechowywania elementów listy. Spróbujmy więc inaczej. Jeden z konstruktorów klasy ,.KUV korzysta z wektora obiektów: 8GEVQTXCNWGUPGY8GEVQT  XCNWGUCFF NGOGPV SWKEM  XCNWGUCFF NGOGPV DTQYP   ,.KUVNKUVPGY,.KUV XCNWGU  Elementy wektora możemy następnie usuwać lub dodawać, ale oczywiście lista nie zareje- struje tych operacji i wobec tego nie będzie odzwierciedlać zmian w zbiorze elementów. Nie istnieje konstruktor klasy ,.KUV, który posiadałby parametr klasy #TTC[.KUV. Jed- nak już konstrukcja komponentu listy z wykorzystaniem wektora jest rzadko przydatna i wobec tego brak ten nie stanowi istotnego ograniczenia. Rozwiązanie polega na utworzeniu modelu klasy GHCWNV.KUV/QFGN, wypełnieniu go po- czątkowymi elementami i związaniu z listą. GHCWNV.KUV/QFGNOQFGNPGY GHCWNV.KUV/QFGN  OQFGNCFF NGOGPVSWKEM  OQFGNCFF NGOGPVDTQYP   ,.KUVNKUVPGY,.KUV OQFGN  388 Java 2. Techniki zaawansowane Możemy teraz dodawać i usuwać elementy modelu, który będzie powiadamiać listę o tych zmianach. OQFGNTGOQXG NGOGPVDTQYP  OQFGNCFF NGOGPVUNQY  Jak łatwo zauważyć, klasa GHCWNV/QFGN.KUV stosuje nazwy metod odmienne niż klasy ko- lekcji. Zastosowany model listy wykorzystuje wektor do przechowania danych. Model ten dzie- dziczy mechanizm powiadamiania listy z klasy #DUVTCEV.KUV/QFGN, podobnie jak nasza kla- sa w poprzednim podrozdziale. Dostępne są konstruktory klasy ,.KUV tworzące listę w oparciu o tablicę lub wektor obiektów. Wydawać się może, że wykorzystują one model GHCWNV.KUV/QFGN w celu przechowania elementów listy. Nie jest to prawdą. Konstruktory te korzystają z uprosz- czonego modelu, który umożliwia jedynie dostęp do elementów, ale nie posiada me- chanizmu powiadamiania o zmianach. Poniżej prezentujemy kod konstruktora klasy ,.KUV tworzącego listę na podstawie wektora: RWDNKE,.KUV HKPCN8GEVQTNKUV CVC ] VJKU PGY#DUVTCEV.KUV/QFGN ] RWDNKEKPVIGV5KG ]TGVWTPNKUV CVCUKG _ RWDNKE1DLGEVIGV GNGOGPV#V KPVK ]TGVWTPNKUV CVCGNGOGPV#V K _ _  _ Pokazuje on, że jeśli zmienimy zawartość wektora po utworzeniu listy, to pokazywać ona będzie mylącą mieszankę starych i nowych elementów, aż do momentu gdy cała lista zostanie odrysowana. (Słowo kluczowe HKPCN w deklaracji konstruktora nie za- brania wprowadzania zmian zawartości wektora w innych fragmentach kodu. Oznacza ono jedynie, że konstruktor nie modyfikuje referencji NKUV CVC. Słowo kluczowe HKPCN jest wymagane w tej deklaracji, ponieważ obiekt NKUV CVC wykorzystywany jest przez klasę wewnętrzną). LCXCZUYKPI,.KUV n .KUV/QFGNIGV/QFGN pobiera model listy. LCXCZUYKPI GHCWNV.KUV/QFGN n n XQKFCFF NGOGPV 1DLGEVQDL umieszcza obiekt na końcu danych modelu. DQQNGCPTGOQXG NGOGPV 1DLGEVQDL usuwa pierwsze wystąpienie obiektu z modelu. Zwraca wartość VTWG, jeśli obiekt został odnaleziony w modelu, wartość HCNUG — w przeciwnym razie. Rozdział 6. n Zaawansowane możliwości pakietu Swing 389 Odrysowywanie zawartości listy Jak dotąd wszystkie przykłady wykorzystywały listy zawierające łańcuchy znaków. W prak- tyce równie łatwo możemy utworzyć listę ikon, dostarczając konstruktorowi tablicę lub wek- tor wypełniony obiektami klasy +EQP. W ogóle możemy reprezentować elementy listy za po- mocą dowolnych rysunków. Klasa ,.KUV automatycznie wyświetla łańcuchy znaków oraz ikony, ale w pozostałych przy- padkach należy dostarczyć jej obiekt odrysowujący zawartość komórek listy. Obiekt taki musi należeć do klasy, która implementuje poniższy interfejs: KPVGTHCEG.KUV GNN4GPFGTGT ]  QORQPGPVIGV.KUV GNN4GPFGTGT QORQPGPV ,.KUVNKUV 1DLGEVXCNWGKPVKPFGZ DQQNGCPKU5GNGEVGFDQQNGCPEGNN*CU(QEWU  _ Jeśli liście dostarczymy taki obiekt, to jego metoda wywoływana będzie dla każdego ele- mentu listy, aby: n ustalić jego wymiary (w przypadku gdy nie wybraliśmy listy o stałych wymiarach komórek), n narysować go. Obiekt ten musi tworzyć i zwracać obiekt typu QORQPGPV, którego metody IGV2TGHGTTGF 5KG oraz RCKPV QORQPGPV wykonają odpowiednie operacje wymagane dla prezentacji ele- mentów listy. Najprostszym sposobem spełnienia tego wymagania jest wykorzystanie klasy wewnętrznej dysponującej tymi metodami: ENCUU/[ GNN4GPFGTGTKORNGOGPVU.KUV GNN4GPFGTGT ] RWDNKE QORQPGPVIGV.KUV GNN4GPFGTGT QORQPGPV HKPCN,.KUVYNKUV HKPCN1DLGEVXCNWGHKPCNKPVKPFGZ HKPCNDQQNGCPKU5GNGEVGFHKPCNDQQNGCPEGNN*CU(QEWYU ] TGVWTPPGY ,2CPGN ] RWDNKEXQKFRCKPV QORQPGPV )TCRJKEUI ] MQFT[UWLæE[GNGOGPV _ RWDNKE KOGPUKQPIGV2TGHGTTGF5KG ] MQFY[PCECLæE[TQOKCT[ _ _ _ _ 390 Java 2. Techniki zaawansowane Program, którego kod źródłowy zawiera listing 6.3, umożliwia wybór czcionki, korzystając z jej rzeczywistego przedstawienia na liście (patrz rysunek 6.3). Metoda RCKPV QORQPGPV wyświetla nazwę danej czcionki, wykorzystując ją samą. Musi także dopasować kolorysty- kę do aktualnego wyglądu klasy ,.KUV. Uzyskujemy ją, posługując się metodami IGV(QTG ITQWPFIGV$CEMITQWPF oraz IGV5GNGEVKQP(QTGITQWPFIGV5GNGEVKQP$CEMITQWPF klasy ,.KUV. Metoda IGV2TGHGTTGF5KG mierzy łańcuch znaków w sposób opisany w książce Java 2. Pod- stawy w rozdziale 7. Rysun
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Java 2. Techniki zaawansowane
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: