Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00138 007833 15905415 na godz. na dobę w sumie
Java. Techniki zaawansowane. Wydanie IX - książka
Java. Techniki zaawansowane. Wydanie IX - książka
Autor: , Liczba stron: 992
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-7762-7 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> java - programowanie
Porównaj ceny (książka, ebook, audiobook).

Tajniki języka Java 7!

Zastanawiasz się, dlaczego język Java zdobył taką popularność? Przyczyn jest co najmniej kilka: automatyczne zarządzanie pamięcią, możliwość uruchamiania kodu na różnych platformach, ogrom dodatkowych narzędzi oraz wyjątkowo aktywna społeczność. Nie bez znaczenia jest również świetna dokumentacja, wsparcie dla usług sieciowych oraz aktywny rozwój, którego dowodem są kolejne wersje tego języka.

Dziewiąte wydanie bestsellerowej pozycji Java. Techniki zaawansowane zostało zaktualizowane i uzupełnione o nowinki z najnowszej wersji języka Java oznaczonej numerem 7. W trakcie lektury dowiesz się, jak wydajnie korzystać ze strumieni, wyrażeń regularnych oraz baz danych.

Java 7 to całkowicie nowy, mocno rozbudowany dostęp do plików - opis wszystkich niuansów znajdziesz w tej publikacji. Co jeszcze? Tworzenie aplikacji dla różnych języków i lokalizacji, zaawansowane wykorzystanie biblioteki Swing oraz dystrybucja stworzonych aplikacji. To tylko niektóre z zagadnień poruszonych w tej wyjątkowej książce, która musi się znaleźć na półce każdego programisty języka Java.

Poznaj:

Wykorzystaj w pełni możliwości języka Java 7!

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

Darmowy fragment publikacji:

Tytuł oryginału: Core Java, Volume II - Advanced Features (9th Edition) Tłumaczenie: Jaromir Senczyk ISBN: 978-83-246-7762-7 Authorized translation from the English language edition, entitled CORE JAVA, VOLUME II – ADVANCED FEATURES, Ninth Edition; ISBN 013708160X; by Cay S. Horstmann; and Gary Cornell; published by Pearson Education, Inc, publishing as Prentice Hall. Copyright © 2013 by Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education Inc. Polish language edition published by HELION S.A. Copyright © 2013. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 032 231 22 19, 032 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/javtz9.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/javtz9 Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis tre(cid:202)ci Przedmowa ..............................................................................................................................................11 Podzi(cid:194)kowania .........................................................................................................................................15 Rozdzia(cid:196) 1. Strumienie i pliki ...................................................................................................................17 1.1. Strumienie .................................................................................................... 17 1.1.1. Odczyt i zapis bajtów .......................................................................... 18 1.1.2. Zoo pe(cid:228)ne strumieni ........................................................................... 20 1.1.3. (cid:227)(cid:241)czenie filtrów strumieni ................................................................... 24 1.2. Strumienie tekstowe ....................................................................................... 28 1.2.1. Zapisywanie tekstu ............................................................................ 28 1.2.2. Wczytywanie tekstu ............................................................................ 31 1.2.3. Zapis obiektów w formacie tekstowym ................................................. 31 1.2.4. Zbiory znaków .................................................................................... 34 1.3. Odczyt i zapis danych binarnych ....................................................................... 39 1.3.1. Strumienie plików o swobodnym dost(cid:246)pie ............................................ 42 1.4. Archiwa ZIP .................................................................................................... 46 1.5. Strumienie obiektów i serializacja .................................................................... 49 1.5.1. Format pliku serializacji obiektów ........................................................ 54 1.5.2. Modyfikowanie domy(cid:264)lnego mechanizmu serializacji ............................. 60 1.5.3. Serializacja singletonów i wylicze(cid:254) ....................................................... 62 1.5.4. Wersje .............................................................................................. 63 1.5.5. Serializacja w roli klonowania .............................................................. 65 Zarz(cid:241)dzanie plikami ........................................................................................ 68 1.6.1. (cid:263)cie(cid:276)ki dost(cid:246)pu ................................................................................. 68 1.6.2. Odczyt i zapis plików .......................................................................... 70 1.6.3. Kopiowanie, przenoszenie i usuwanie plików ........................................ 72 1.6.4. Tworzenie plików i katalogów .............................................................. 72 1.6.5. Informacje o plikach ........................................................................... 74 1.6.6. Przegl(cid:241)danie plików w katalogu ........................................................... 75 1.6.7. Systemy plików ZIP ............................................................................ 78 1.7. Mapowanie plików w pami(cid:246)ci ........................................................................... 79 1.7.1. Struktura bufora danych ..................................................................... 86 1.7.2. Blokowanie plików .............................................................................. 88 1.8. Wyra(cid:276)enia regularne ........................................................................................ 90 1.6. Kup książkęPoleć książkę 4 Java. Techniki zaawansowane 2.7. Rozdzia(cid:196) 2. J(cid:194)zyk XML ............................................................................................................................101 2.1. Wprowadzenie do j(cid:246)zyka XML ........................................................................ 102 2.1.1. Struktura dokumentu XML ................................................................ 104 2.2. Parsowanie dokumentów XML ....................................................................... 107 2.3. Kontrola poprawno(cid:264)ci dokumentów XML ......................................................... 118 2.3.1. Definicje typów dokumentów ............................................................. 119 2.3.2. XML Schema ................................................................................... 126 2.3.3. Praktyczny przyk(cid:228)ad .......................................................................... 129 2.4. Wyszukiwanie informacji i XPath ..................................................................... 142 2.5. Przestrzenie nazw ......................................................................................... 148 Parsery strumieniowe .................................................................................... 150 2.6. 2.6.1. Wykorzystanie parsera SAX ............................................................... 151 2.6.2. Wykorzystanie parsera StAX .............................................................. 156 Tworzenie dokumentów XML .......................................................................... 160 2.7.1. Dokumenty bez przestrzeni nazw ....................................................... 160 2.7.2. Dokumenty z przestrzeni(cid:241) nazw ......................................................... 160 2.7.3. Zapisywanie dokumentu ................................................................... 161 2.7.4. Przyk(cid:228)ad: tworzenie pliku SVG ............................................................ 162 2.7.5. Tworzenie dokumentu XML za pomoc(cid:241) parsera StAX ........................... 165 Przekszta(cid:228)cenia XSL ...................................................................................... 172 Rozdzia(cid:196) 3. Programowanie aplikacji sieciowych ...............................................................................183 Po(cid:228)(cid:241)czenia z serwerem .................................................................................. 183 3.1.1. Limity czasu gniazd .......................................................................... 187 3.1.2. Adresy internetowe .......................................................................... 189 Implementacja serwerów ............................................................................... 191 3.2.1. Obs(cid:228)uga wielu klientów ..................................................................... 194 3.2.2. Po(cid:228)(cid:241)czenia cz(cid:246)(cid:264)ciowo zamkni(cid:246)te ....................................................... 196 Przerywanie dzia(cid:228)ania gniazd sieciowych ......................................................... 198 Po(cid:228)(cid:241)czenia wykorzystuj(cid:241)ce URL ...................................................................... 204 3.4.1. URL i URI ........................................................................................ 205 3.4.2. Zastosowanie klasy URLConnection do pobierania informacji .............. 207 3.4.3. Wysy(cid:228)anie danych do formularzy ........................................................ 216 3.5. Wysy(cid:228)anie poczty elektronicznej ..................................................................... 222 Rozdzia(cid:196) 4. Programowanie baz danych: JDBC ...................................................................................227 Architektura JDBC ......................................................................................... 228 4.1.1. Typy sterowników JDBC .................................................................... 228 4.1.2. Typowe zastosowania JDBC .............................................................. 229 J(cid:246)zyk SQL .................................................................................................... 231 Instalacja JDBC ............................................................................................ 235 4.3.1. Adresy URL baz danych .................................................................... 237 4.3.2. Pliki JAR zawieraj(cid:241)ce sterownik ......................................................... 237 4.3.3. Uruchamianie bazy danych ................................................................ 237 4.3.4. Rejestracja klasy sterownika ............................................................. 238 4.3.5. Nawi(cid:241)zywanie po(cid:228)(cid:241)czenia z baz(cid:241) danych ............................................ 239 4.4. Wykonywanie polece(cid:254) j(cid:246)zyka SQL .................................................................. 242 4.4.1. Zarz(cid:241)dzanie po(cid:228)(cid:241)czeniami, poleceniami i zbiorami wyników .................. 245 4.4.2. Analiza wyj(cid:241)tków SQL ....................................................................... 246 4.4.3. Wype(cid:228)nianie bazy danych .................................................................. 248 3.3. 3.4. 4.2. 4.3. 2.8. 3.1. 3.2. 4.1. Kup książkęPoleć książkę Spis tre(cid:202)ci 5 4.6. 5.1. 5.2. 4.5. Wykonywanie zapyta(cid:254) ................................................................................... 252 4.5.1. Polecenia przygotowane ................................................................... 252 4.5.2. Odczyt i zapis du(cid:276)ych obiektów .......................................................... 258 4.5.3. Sekwencje steruj(cid:241)ce ........................................................................ 260 4.5.4. Zapytania o wielu zbiorach wyników ................................................... 261 4.5.5. Pobieranie warto(cid:264)ci kluczy wygenerowanych automatycznie ................. 262 Przewijalne i aktualizowalne zbiory wyników zapyta(cid:254) ........................................ 263 4.6.1. Przewijalne zbiory wyników ................................................................ 263 4.6.2. Aktualizowalne zbiory rekordów ......................................................... 265 Zbiory rekordów ............................................................................................ 270 4.7.1. Tworzenie zbiorów rekordów .............................................................. 270 4.7.2. Buforowane zbiory rekordów .............................................................. 271 4.8. Metadane .................................................................................................... 274 Transakcje ................................................................................................... 283 4.9. 4.9.1. Punkty kontrolne .............................................................................. 284 4.9.2. Aktualizacje wsadowe ....................................................................... 284 4.9.3. Zaawansowane typy j(cid:246)zyka SQL ........................................................ 287 4.10. Zaawansowane zarz(cid:241)dzanie po(cid:228)(cid:241)czeniami ....................................................... 288 Rozdzia(cid:196) 5. Internacjonalizacja .............................................................................................................291 Lokalizatory .................................................................................................. 292 Formaty liczb ................................................................................................ 297 5.2.1. Waluty ............................................................................................... 302 5.3. Data i czas ................................................................................................... 304 Porz(cid:241)dek alfabetyczny ................................................................................... 311 5.4. 5.4.1. Moc uporz(cid:241)dkowania ........................................................................ 312 5.4.2. Rozk(cid:228)ad ........................................................................................... 313 Formatowanie komunikatów .......................................................................... 318 5.5.1. Formatowanie z wariantami ............................................................... 320 Pliki tekstowe i zbiory znaków ........................................................................ 322 5.6.1. Internacjonalizacja a pliki (cid:274)ród(cid:228)owe programów ................................... 322 5.7. Komplety zasobów ........................................................................................ 324 5.7.1. Wyszukiwanie kompletów zasobów .................................................... 324 5.7.2. Pliki w(cid:228)a(cid:264)ciwo(cid:264)ci .............................................................................. 325 5.7.3. Klasy kompletów zasobów ................................................................ 326 5.8. Kompletny przyk(cid:228)ad ....................................................................................... 328 Rozdzia(cid:196) 6. Zaawansowane mo(cid:209)liwo(cid:202)ci pakietu Swing ......................................................................343 Listy ............................................................................................................ 343 6.1.1. Komponent JList .............................................................................. 344 6.1.2. Modele list ...................................................................................... 349 6.1.3. Wstawianie i usuwanie ..................................................................... 354 6.1.4. Odrysowywanie zawarto(cid:264)ci listy ......................................................... 355 Tabele ......................................................................................................... 359 6.2.1. Najprostsze tabele ........................................................................... 359 6.2.2. Modele tabel ................................................................................... 363 6.2.3. Wiersze i kolumny ............................................................................ 367 6.2.4. Rysowanie i edycja komórek ............................................................. 383 6.3. Drzewa ........................................................................................................ 394 6.3.1. Najprostsze drzewa .......................................................................... 395 6.3.2. Przegl(cid:241)danie w(cid:246)z(cid:228)ów ......................................................................... 410 5.5. 5.6. 4.7. 6.1. 6.2. Kup książkęPoleć książkę 6 Java. Techniki zaawansowane 7.1. 7.2. 6.3.3. Rysowanie w(cid:246)z(cid:228)ów ............................................................................ 412 6.3.4. Nas(cid:228)uchiwanie zdarze(cid:254) w drzewach ................................................... 415 6.3.5. W(cid:228)asne modele drzew ...................................................................... 421 6.4. Komponenty tekstowe ................................................................................... 429 6.4.1. (cid:263)ledzenie zmian zawarto(cid:264)ci komponentów tekstowych ........................ 430 6.4.2. Sformatowane pola wej(cid:264)ciowe .......................................................... 433 6.4.3. Komponent JSpinner ........................................................................ 449 6.4.4. Prezentacja HTML za pomoc(cid:241) JEditorPane ......................................... 457 6.5. Wska(cid:274)niki post(cid:246)pu ........................................................................................ 463 6.5.1. Paski post(cid:246)pu ................................................................................. 463 6.5.2. Monitory post(cid:246)pu ............................................................................. 466 6.5.3. Monitorowanie post(cid:246)pu strumieni wej(cid:264)cia .......................................... 469 6.6. Organizatory komponentów i dekoratory .......................................................... 474 6.6.1. Panele dzielone ............................................................................... 475 6.6.2. Panele z zak(cid:228)adkami ......................................................................... 478 6.6.3. Panele pulpitu i ramki wewn(cid:246)trzne ..................................................... 483 6.6.4. Rozmieszczenie kaskadowe i s(cid:241)siaduj(cid:241)ce .......................................... 487 6.6.5. Zg(cid:228)aszanie weta do zmiany w(cid:228)a(cid:264)ciwo(cid:264)ci ............................................. 495 Rozdzia(cid:196) 7. Zaawansowane mo(cid:209)liwo(cid:202)ci biblioteki AWT ......................................................................505 Potokowe tworzenie grafiki ............................................................................ 506 Figury .......................................................................................................... 508 7.2.1. Wykorzystanie klas obiektów graficznych ............................................ 511 Pola ............................................................................................................ 523 7.3. 7.4. (cid:263)lad p(cid:246)dzla .................................................................................................. 524 7.5. Wype(cid:228)nienia ................................................................................................. 532 Przekszta(cid:228)cenia uk(cid:228)adu wspó(cid:228)rz(cid:246)dnych ............................................................ 534 7.6. 7.7. Przycinanie ................................................................................................... 539 7.8. Przezroczysto(cid:264)(cid:232) i sk(cid:228)adanie obrazów .............................................................. 541 7.9. Wskazówki operacji graficznych ...................................................................... 549 7.10. Czytanie i zapisywanie plików graficznych ........................................................ 555 7.10.1. Wykorzystanie obiektów zapisu i odczytu plików graficznych ................. 555 7.10.2. Odczyt i zapis plików zawieraj(cid:241)cych sekwencje obrazów ....................... 560 7.11. Operacje na obrazach ................................................................................... 565 7.11.1. Dost(cid:246)p do danych obrazu ................................................................. 565 7.11.2. Filtrowanie obrazów .......................................................................... 571 7.12. Drukowanie .................................................................................................. 580 7.12.1. Drukowanie grafiki ........................................................................... 580 7.12.2. Drukowanie wielu stron .................................................................... 589 7.12.3. Podgl(cid:241)d wydruku .............................................................................. 591 7.12.4. Us(cid:228)ugi drukowania ............................................................................ 599 7.12.5. Us(cid:228)ugi drukowania za po(cid:264)rednictwem strumieni .................................. 603 7.12.6. Atrybuty drukowania ......................................................................... 604 7.13. Schowek ...................................................................................................... 610 7.13.1. Klasy i interfejsy umo(cid:276)liwiaj(cid:241)ce przekazywanie danych ........................ 611 7.13.2. Przekazywanie tekstu ....................................................................... 612 7.13.3. Interfejs Transferable i formaty danych .............................................. 615 7.13.4. Przekazywanie obrazów za pomoc(cid:241) schowka ...................................... 617 7.13.5. Wykorzystanie schowka systemowego do przekazywania obiektów Java ..... 621 7.13.6. Zastosowanie lokalnego schowka do przekazywania referencji obiektów ........................................................................... 624 Kup książkęPoleć książkę Spis tre(cid:202)ci 7 7.15. 7.14. Mechanizm „przeci(cid:241)gnij i upu(cid:264)(cid:232)” ................................................................... 625 7.14.1. Przekazywanie danych pomi(cid:246)dzy komponentami Swing ........................ 627 7.14.2. (cid:273)ród(cid:228)a przeci(cid:241)ganych danych ............................................................. 631 7.14.3. Cele upuszczanych danych ................................................................ 633 Integracja z macierzyst(cid:241) platform(cid:241) ................................................................. 641 7.15.1. Ekran powitalny ............................................................................... 641 7.15.2. Uruchamianie macierzystych aplikacji pulpitu ..................................... 646 7.15.3. Zasobnik systemowy ........................................................................ 651 Rozdzia(cid:196) 8. JavaBeans ..........................................................................................................................657 8.1. Dlaczego ziarnka? ......................................................................................... 658 8.2. Proces tworzenia ziarnek JavaBeans .............................................................. 660 8.3. Wykorzystanie ziarnek do tworzenia aplikacji ................................................... 662 8.3.1. Umieszczanie ziarnek w plikach JAR .................................................. 663 8.3.2. Korzystanie z ziarnek ........................................................................ 664 8.4. Wzorce nazw w(cid:228)a(cid:264)ciwo(cid:264)ci ziarnek i zdarze(cid:254) ..................................................... 669 Typy w(cid:228)a(cid:264)ciwo(cid:264)ci ziarnek ............................................................................... 673 8.5. 8.5.1. W(cid:228)a(cid:264)ciwo(cid:264)ci proste .......................................................................... 673 8.5.2. W(cid:228)a(cid:264)ciwo(cid:264)ci indeksowane ................................................................. 674 8.5.3. W(cid:228)a(cid:264)ciwo(cid:264)ci powi(cid:241)zane .................................................................... 674 8.5.4. W(cid:228)a(cid:264)ciwo(cid:264)ci ograniczone .................................................................. 676 8.6. Klasa informacyjna ziarnka ............................................................................ 683 Edytory w(cid:228)a(cid:264)ciwo(cid:264)ci ...................................................................................... 687 8.7. 8.7.1. Implementacja edytora w(cid:228)a(cid:264)ciwo(cid:264)ci ................................................... 690 Indywidualizacja ziarnka ................................................................................ 697 8.8.1. Implementacja klasy indywidualizacji ................................................. 699 Trwa(cid:228)o(cid:264)(cid:232) ziarnek JavaBeans .......................................................................... 705 8.9.1. Zastosowanie mechanizmu trwa(cid:228)o(cid:264)ci JavaBeans dla dowolnych danych ..... 709 8.9.2. Kompletny przyk(cid:228)ad zastosowania trwa(cid:228)o(cid:264)ci JavaBeans ....................... 715 Rozdzia(cid:196) 9. Bezpiecze(cid:198)stwo .................................................................................................................727 (cid:227)adowanie klas ............................................................................................ 728 9.1.1. Hierarchia klas (cid:228)adowania ................................................................. 730 9.1.2. Zastosowanie procedur (cid:228)aduj(cid:241)cych w roli przestrzeni nazw ................... 732 9.1.3. Implementacja w(cid:228)asnej procedury (cid:228)aduj(cid:241)cej ........................................ 733 9.2. Weryfikacja kodu maszyny wirtualnej .............................................................. 738 9.3. Mened(cid:276)ery bezpiecze(cid:254)stwa i pozwolenia ......................................................... 742 9.3.1. Bezpiecze(cid:254)stwo na platformie Java ................................................... 744 9.3.2. Pliki polityki bezpiecze(cid:254)stwa ............................................................. 747 9.3.3. Tworzenie w(cid:228)asnych klas pozwole(cid:254) .................................................... 755 9.3.4. Implementacja klasy pozwole(cid:254) .......................................................... 756 9.4. Uwierzytelnianie u(cid:276)ytkowników ....................................................................... 762 9.4.1. Modu(cid:228)y JAAS .................................................................................... 767 Podpis cyfrowy ............................................................................................. 776 9.5.1. Skróty wiadomo(cid:264)ci ........................................................................... 777 9.5.2. Podpisywanie wiadomo(cid:264)ci ................................................................ 779 9.5.3. Weryfikacja podpisu ......................................................................... 781 9.5.4. Problem uwierzytelniania .................................................................. 784 9.5.5. Podpisywanie certyfikatów ................................................................ 786 9.5.6. (cid:275)(cid:241)dania certyfikatu .......................................................................... 787 9.1. 8.8. 8.9. 9.5. Kup książkęPoleć książkę 8 Java. Techniki zaawansowane 9.6. 10.2. Podpisywanie kodu ....................................................................................... 788 9.6.1. Podpisywanie plików JAR .................................................................. 789 9.6.2. Certyfikaty twórców oprogramowania ................................................. 793 9.7. Szyfrowanie .................................................................................................. 795 9.7.1. Szyfrowanie symetryczne .................................................................. 795 9.7.2. Generowanie klucza ......................................................................... 797 9.7.3. Strumienie szyfruj(cid:241)ce ....................................................................... 801 9.7.4. Szyfrowanie kluczem publicznym ....................................................... 803 Rozdzia(cid:196) 10. Skrypty, kompilacja i adnotacje ......................................................................................807 10.1. Skrypty na platformie Java ............................................................................. 807 10.1.1. Wybór silnika skryptów ..................................................................... 808 10.1.2. Wykonywanie skryptów i wi(cid:241)zania zmiennych ...................................... 809 10.1.3. Przekierowanie wej(cid:264)cia i wyj(cid:264)cia ........................................................ 811 10.1.4. Wywo(cid:228)ywanie funkcji i metod skryptów ............................................... 812 10.1.5. Kompilacja skryptu ........................................................................... 814 10.1.6. Przyk(cid:228)ad: skrypty i graficzny interfejs u(cid:276)ytkownika ................................ 815 Interfejs kompilatora ..................................................................................... 819 10.2.1. Kompilacja w najprostszy sposób ...................................................... 820 10.2.2. Stosowanie zada(cid:254) kompilacji ............................................................ 820 10.2.3. Przyk(cid:228)ad: dynamiczne tworzenie kodu w j(cid:246)zyku Java ............................ 826 10.3. Stosowanie adnotacji .................................................................................... 830 10.3.1. Przyk(cid:228)ad: adnotacje obs(cid:228)ugi zdarze(cid:254) ................................................... 832 10.4. Sk(cid:228)adnia adnotacji ........................................................................................ 837 10.5. Adnotacje standardowe ................................................................................. 841 10.5.1. Adnotacje kompilacji ........................................................................ 842 10.5.2. Adnotacje zarz(cid:241)dzania zasobami ....................................................... 842 10.5.3. Metaadnotacje ................................................................................. 843 10.6. Przetwarzanie adnotacji w kodzie (cid:274)ród(cid:228)owym ................................................... 845 10.7. In(cid:276)ynieria kodu bajtowego ............................................................................. 851 10.7.1. Modyfikacja kodu bajtowego podczas (cid:228)adowania ................................. 857 Rozdzia(cid:196) 11. Obiekty rozproszone ..........................................................................................................861 11.1. Role klienta i serwera ................................................................................... 862 11.2. Wywo(cid:228)ania zdalnych metod ............................................................................ 864 11.2.1. Namiastka i szeregowanie parametrów .............................................. 864 11.3. Model programowania RMI ............................................................................ 866 11.3.1. Interfejsy i implementacje ................................................................. 866 11.3.2. Rejestr RMI ..................................................................................... 868 11.3.3. Przygotowanie wdro(cid:276)enia .................................................................. 871 11.3.4. Rejestrowanie aktywno(cid:264)ci RMI .......................................................... 874 11.4. Parametry zdalnych metod i warto(cid:264)ci zwracane ............................................... 876 11.4.1. Przekazywanie obiektów zdalnych ...................................................... 876 11.4.2. Przekazywanie obiektów, które nie s(cid:241) zdalne ...................................... 876 11.4.3. Dynamiczne (cid:228)adowanie klas .............................................................. 878 11.4.4. Zdalne referencje obiektów o wielu interfejsach .................................. 883 11.4.5. Zdalne obiekty i metody equals, hashCode oraz clone ........................ 884 11.5. Aktywacja zdalnych obiektów ......................................................................... 884 Kup książkęPoleć książkę Spis tre(cid:202)ci 9 Rozdzia(cid:196) 12. Metody macierzyste ..........................................................................................................891 12.1. Wywo(cid:228)ania funkcji j(cid:246)zyka C z programów w j(cid:246)zyku Java ..................................... 892 12.2. Numeryczne parametry metod i warto(cid:264)ci zwracane .......................................... 898 12.2.1. Wykorzystanie funkcji printf do formatowania liczb .............................. 899 12.3. (cid:227)a(cid:254)cuchy znaków jako parametry ................................................................... 900 12.4. Dost(cid:246)p do sk(cid:228)adowych obiektu ...................................................................... 906 12.4.1. Dost(cid:246)p do pól instancji ..................................................................... 906 12.4.2. Dost(cid:246)p do pól statycznych ................................................................ 910 12.5. Sygnatury ..................................................................................................... 911 12.6. Wywo(cid:228)ywanie metod j(cid:246)zyka Java ..................................................................... 912 12.6.1. Wywo(cid:228)ywanie metod obiektów ........................................................... 912 12.6.2. Wywo(cid:228)ywanie metod statycznych ........................................................ 916 12.6.3. Konstruktory .................................................................................... 917 12.6.4. Alternatywne sposoby wywo(cid:228)ywania metod ......................................... 917 12.7. Tablice ........................................................................................................ 919 12.8. Obs(cid:228)uga b(cid:228)(cid:246)dów ............................................................................................ 923 12.9. Interfejs programowy wywo(cid:228)a(cid:254) j(cid:246)zyka Java ...................................................... 927 12.10. Kompletny przyk(cid:228)ad: dost(cid:246)p do rejestru systemu Windows ............................... 932 12.10.1. Rejestr systemu Windows ............................................................... 933 12.10.2. Interfejs dost(cid:246)pu do rejestru na platformie Java ................................ 934 12.10.3. Implementacja dost(cid:246)pu do rejestru za pomoc(cid:241) metod macierzystych .... 935 Skorowidz .............................................................................................................................................949 Kup książkęPoleć książkę 10 Java. Techniki zaawansowane Kup książkęPoleć książkę 7 Zaawansowane mo(cid:209)liwo(cid:202)ci biblioteki AWT W tym rozdziale: (cid:81) Potokowe tworzenie grafiki. (cid:81) Figury. (cid:81) Pola. (cid:81) (cid:285)lad p(cid:266)dzla. (cid:81) Wype(cid:225)nianie. (cid:81) Przekszta(cid:225)cenia uk(cid:225)adu wspó(cid:225)rz(cid:266)dnych. (cid:81) Przycinanie. (cid:81) Przezroczysto(cid:286)(cid:252) i sk(cid:225)adanie obrazów. (cid:81) Wskazówki operacji graficznych. (cid:81) Czytanie i zapisywanie plików graficznych. (cid:81) Operacje na obrazach. (cid:81) Drukowanie. (cid:81) Schowek. (cid:81) Mechanizm „przeci(cid:261)gnij i upu(cid:286)(cid:252)”. (cid:81) Integracja z macierzyst(cid:261) platform(cid:261). Do tworzenia prostych rysunków mo(cid:298)emy wykorzysta(cid:252) metody klasy Graphics. Metody te s(cid:261) wystarczaj(cid:261)ce w przypadku podstawowych apletów i aplikacji, ale nie nadaj(cid:261) si(cid:266) do zasto- sowa(cid:276) wymagaj(cid:261)cych tworzenia skomplikowanych rysunków lub potrzebuj(cid:261)cych daleko id(cid:261)- cej kontroli nad tworzon(cid:261) grafik(cid:261). Do takich zastosowa(cid:276) przeznaczona jest biblioteka Java 2D, której mo(cid:298)liwo(cid:286)ci przedstawimy w bie(cid:298)(cid:261)cym rozdziale. Kup książkęPoleć książkę 506 Java. Techniki zaawansowane Zajmiemy si(cid:266) tak(cid:298)e omówieniem implementacji drukowania w aplikacjach Java. Omówimy te(cid:298) dwa sposoby przekazywania danych pomi(cid:266)dzy programami: schowek syste- mowy oraz mechanizm „przeci(cid:261)gnij i upu(cid:286)(cid:252)”. Mog(cid:261) one by(cid:252) wykorzystywane do przekazy- wania danych mi(cid:266)dzy dwiema aplikacjami Java lub pomi(cid:266)dzy aplikacj(cid:261) Java i programem rodzimym danej platformy. Na koniec przedstawimy techniki pozwalaj(cid:261)ce zbli(cid:298)y(cid:252) zacho- wanie aplikacji tworzonych w j(cid:266)zyku Java do aplikacji macierzystych platformy: tworzenie ekranu powitania i korzystanie z zasobnika systemowego. 7.1. Potokowe tworzenie grafiki JDK 1.0 dysponowa(cid:225) bardzo prostym mechanizmem tworzenia grafiki. Wystarczy(cid:225)o wybra(cid:252) jedynie kolor i tryb rysowania, a nast(cid:266)pnie wywo(cid:225)a(cid:252) odpowiedni(cid:261) metod(cid:266) klasy Graphics, na przyk(cid:225)ad drawRect lub fillOval. Tworzenie grafiki za pomoc(cid:261) Java 2D udost(cid:266)pnia wiele wi(cid:266)cej mo(cid:298)liwo(cid:286)ci: tworzenie ró(cid:298)norodnych figur, (cid:81) (cid:81) kontrol(cid:266) nad sposobem tworzenia obrysu figur, (cid:81) wype(cid:225)nianie figur ró(cid:298)nymi kolorami i ich odcieniami, a tak(cid:298)e wzorami wype(cid:225)nie(cid:276), (cid:81) metody przekszta(cid:225)ce(cid:276) figur — przesuni(cid:266)cia, skalowania, obrotu i zmian proporcji, (cid:81) przycinanie figur do dowolnie wybranych obszarów, (cid:81) wybór zasad sk(cid:225)adania obrazów opisuj(cid:261)cych sposób tworzenia kombinacji pikseli nowej figury z istniej(cid:261)cymi ju(cid:298) pikselami t(cid:225)a, (cid:81) wskazówki tworzenia grafiki umo(cid:298)liwiaj(cid:261)ce uzyskanie kompromisu pomi(cid:266)dzy szybko(cid:286)ci(cid:261) tworzenia grafiki a jej jako(cid:286)ci(cid:261). Aby narysowa(cid:252) figur(cid:266), nale(cid:298)y kolejno wykona(cid:252) nast(cid:266)puj(cid:261)ce kroki. 1. Musimy uzyska(cid:252) obiekt klasy Graphics2D, która jest klas(cid:261) pochodn(cid:261) klasy Graphics. Pocz(cid:261)wszy od Java SE 1.2 metody, takie jak paint czy paintComponent, automatycznie otrzymuj(cid:261) jako parametr obiekty klasy Graphics2D. Wystarczy wi(cid:266)c wykona(cid:252) nast(cid:266)puj(cid:261)ce rzutowanie: public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D)g; . . . } 2. Korzystamy z metody setRenderingHints w celu ustalenia kompromisu mi(cid:266)dzy szybko(cid:286)ci(cid:261) tworzenia grafiki a jej jako(cid:286)ci(cid:261). RenderingHints hints = . . . ; g2.setRenderingHints(hints); Kup książkęPoleć książkę Rozdzia(cid:196) 7. (cid:81) Zaawansowane mo(cid:209)liwo(cid:202)ci biblioteki AWT 507 3. Wywo(cid:225)ujemy metod(cid:266) setStroke w celu okre(cid:286)lenia rodzaju (cid:286)ladu p(cid:266)dzla, który zostanie u(cid:298)yty do narysowania obrysu figury. Musimy wybra(cid:252) odpowiedni(cid:261) grubo(cid:286)(cid:252) (cid:286)ladu p(cid:266)dzla oraz sposób jego pozostawiania (ci(cid:261)g(cid:225)y, przerywany). Stroke stroke = . . . ; g2.setStroke(stroke); 4. Wywo(cid:225)ujemy metod(cid:266) setPaint w celu okre(cid:286)lenia sposobu wype(cid:225)nienia obszaru ograniczonego obrysem. Nale(cid:298)y wybra(cid:252) wype(cid:225)nienie sta(cid:225)ym kolorem, kolorem o zmieniaj(cid:261)cych si(cid:266) odcieniach lub wzorem wype(cid:225)nienia. Paint paint = . . . ; g2.setPaint(paint); 5. Korzystamy z metody clip w celu okre(cid:286)lenia obszaru przyci(cid:266)cia. Shape clip = . . . ; g2.clip(clip); 6. Wywo(cid:225)ujemy metod(cid:266) transform, aby przekszta(cid:225)ci(cid:252) wspó(cid:225)rz(cid:266)dne u(cid:298)ytkownika na wspó(cid:225)rz(cid:266)dne urz(cid:261)dzenia. Przekszta(cid:225)cenie takie stosujemy, je(cid:286)li w programie (cid:225)atwiej nam pos(cid:225)ugiwa(cid:252) si(cid:266) w(cid:225)asnym uk(cid:225)adem wspó(cid:225)rz(cid:266)dnych ni(cid:298) wspó(cid:225)rz(cid:266)dnymi pikseli. AffineTransform transform = . . . ; g2.transform(transform); 7. Wywo(cid:225)ujemy metod(cid:266) setComposite dla okre(cid:286)lenia zasady sk(cid:225)adania obrazów opisuj(cid:261)cej tworzenie kombinacji nowych pikseli z ju(cid:298) istniej(cid:261)cymi. Composite composite = . . . ; g2.setComposite(composite); 8. Tworzymy figur(cid:266). Java 2D udost(cid:266)pnia w tym celu wiele obiektów i metod umo(cid:298)liwiaj(cid:261)cych tworzenie kombinacji figur. Shape shape = . . . ; 9. Rysujemy i (lub) wype(cid:225)niamy figur(cid:266). Je(cid:286)li narysujemy figur(cid:266), to powstanie jedynie jej obrys, który nast(cid:266)pnie mo(cid:298)emy wype(cid:225)ni(cid:252). g2.draw(shape); g2.fill(shape); Oczywi(cid:286)cie nie zawsze musimy realizowa(cid:252) wszystkie wymienione etapy. Parametry kontekstu graficznego posiadaj(cid:261) warto(cid:286)ci domy(cid:286)lne wystarczaj(cid:261)ce w wielu przypadkach. W kolejnych podrozdzia(cid:225)ach przedstawimy sposób tworzenia figur, definiowania (cid:286)ladów p(cid:266)dzla i wype(cid:225)nie(cid:276), przekszta(cid:225)cenia i zasady sk(cid:225)adania obrazów. Metody set nie wywo(cid:225)uj(cid:261) (cid:298)adnych operacji graficznych, a powoduj(cid:261) jedynie zmiany stanu kontekstu graficznego. Podobnie utworzenie obiektu reprezentuj(cid:261)cego figur(cid:266) nie powoduje na- rysowania jej reprezentacji. Operacje graficzne wykonywane s(cid:261) jedynie na skutek wywo(cid:225)ania metod draw lub fill. W ich rezultacie reprezentacja graficzna figury tworzona jest w potoku rysowania (patrz rysunek 7.1). Kup książkęPoleć książkę 508 Java. Techniki zaawansowane Rysunek 7.1. Potok rysowania W potoku tym wykonywane s(cid:261) nast(cid:266)puj(cid:261)ce operacje prowadz(cid:261)ce do utworzenia reprezenta- cji graficznej obiektu. 1. Tworzony jest obrys figury. 2. Obrys figury jest przekszta(cid:225)cany. 3. Obrys figury jest przycinany. Je(cid:286)li figura i obszar przyci(cid:266)cia nie maj(cid:261) cz(cid:266)(cid:286)ci wspólnej, to przetwarzanie w potoku ko(cid:276)czy si(cid:266) na tym etapie. 4. Wype(cid:225)niany jest obszar figury powsta(cid:225)y po przyci(cid:266)ciu. 5. Piksele wype(cid:225)nionej figury sk(cid:225)adane s(cid:261) z istniej(cid:261)cymi pikselami t(cid:225)a. (Na rysunku 7.1 ko(cid:225)o stanowi fragment t(cid:225)a, na które nak(cid:225)adana jest figura fili(cid:298)anki). W kolejnym podrozdziale przedstawimy sposób definiowania figur, a nast(cid:266)pnie przejdziemy do omówienia kontekstów graficznych. java.awt.Graphics2D 1.2 (cid:81) void draw(Shape s) rysuje obrys figury zgodnie z bie(cid:298)(cid:261)cymi parametrami kontekstu graficznego. (cid:81) void fill(Shape s) wype(cid:225)nia obrys figury zgodnie z bie(cid:298)(cid:261)cymi parametrami kontekstu graficznego. 7.2. Figury Klasa Graphics udost(cid:266)pnia szereg metod umo(cid:298)liwiaj(cid:261)cych rysowanie figur: drawLine drawRectangle drawRoundRect draw3DRect drawPolygon drawPolyline drawOval drawArc Posiada tak(cid:298)e odpowiadaj(cid:261)ce im metody fill tworzenia wype(cid:225)nie(cid:276) figur. Wszystkie te metody dost(cid:266)pne s(cid:261) w klasie Graphics ju(cid:298) od wersji JDK 1.0. Natomiast Java 2D proponuje inne, bar- dziej obiektowe podej(cid:286)cie. Zamiast metod udost(cid:266)pnia odpowiednie klasy: Line2D Rectangle2D RoundRectangle2D Kup książkęPoleć książkę Rozdzia(cid:196) 7. (cid:81) Zaawansowane mo(cid:209)liwo(cid:202)ci biblioteki AWT 509 Ellipse2D Arc2D QuadCurve2D CubicCurve2D GeneralPath Wszystkie wymienione klasy implementuj(cid:261) interfejs Shape. Zdefiniowana jest tak(cid:298)e klasa Point2D, która cho(cid:252) reprezentuje punkt o wspó(cid:225)rz(cid:266)dnych x i y, a nie figur(cid:266), to u(cid:298)ywana jest podczas definiowania figur. Aby uzyska(cid:252) reprezentacj(cid:266) graficzn(cid:261) figury, musimy wi(cid:266)c najpierw utworzy(cid:252) obiekt klasy implementuj(cid:261)cej interfejs Shape, a nast(cid:266)pnie wywo(cid:225)a(cid:252) metod(cid:266) draw klasy Graphics2D. Jak (cid:225)atwo zauwa(cid:298)y(cid:252), klasy Line2D, Rectangle2D, RoundRectangle2D, Ellipse2D i Arc2D odpo- wiadaj(cid:261) metodom drawLine, drawRectangle, drawRoundRectangle, drawOval i drawArc klasy Graphics. (Koncept „prostok(cid:261)ta w trzech wymiarach” zarzucono i dlatego metoda draw3DRect nie posiada swego odpowiednika w postaci klasy). Java 2D udost(cid:266)pnia dodatkowo klasy QuadCurve2D i CubicCurve2D reprezentuj(cid:261)ce krzywe drugiego i trzeciego stopnia. Omówimy je w dalszej cz(cid:266)(cid:286)ci tego podrozdzia(cid:225)u. Nie istnieje natomiast bezpo(cid:286)redni odpowiednik metody drawPolygon. Mo(cid:298)emy jednak do tworzenia wielok(cid:261)tów wykorzysta(cid:252) klas(cid:266) GeneralPath, która opisuje (cid:286)cie(cid:298)ki z(cid:225)o(cid:298)one z odcinków, a tak(cid:298)e krzywych drugiego i trzeciego stopnia. Klasy Rectangle2D RoundRectangle2D Ellipse2D Arc2D s(cid:261) pochodnymi klasy RectangularShape. Cho(cid:252) elipsy i (cid:225)uki nie s(cid:261) prostok(cid:261)tami, to jednak podczas ich definiowania wykorzystywany jest prostok(cid:261)t ograniczaj(cid:261)cy (patrz rysunek 7.2). Rysunek 7.2. Prostok(cid:241)t ograniczaj(cid:241)cy elips(cid:246) i (cid:228)uk Ka(cid:298)da z klas, której nazwa zako(cid:276)czona jest przyrostkiem 2D, posiada dwie klasy pochodne umo(cid:298)liwiaj(cid:261)ce okre(cid:286)lanie wspó(cid:225)rz(cid:266)dnych za pomoc(cid:261) warto(cid:286)ci typu float lub double. W ksi(cid:261)(cid:298)ce Java. Podstawy spotkali(cid:286)my ju(cid:298) klasy Rectangle2D.Float i Rectangle2D.Double. Ten sam schemat stosowany jest w przypadku pozosta(cid:225)ych klas, na przyk(cid:225)ad Arc2D.Float i Arc2D.Double. Implementacja wszystkich klas graficznych wykorzystuje w rzeczywisto(cid:286)ci wspó(cid:225)rz(cid:266)dne typu float, poniewa(cid:298) reprezentacja tego typu zajmuje mniej miejsca i posiada wystarczaj(cid:261)c(cid:261) do- k(cid:225)adno(cid:286)(cid:252) dla operacji graficznych. Poniewa(cid:298) jednak operowanie warto(cid:286)ciami typu float jest w j(cid:266)zyku Java ma(cid:225)o wygodne, to wi(cid:266)kszo(cid:286)(cid:252) metod klas graficznych posiada parametry i zwraca warto(cid:286)ci typu double. Zwykle wi(cid:266)c jedynie podczas tworzenia obiektu klasy graficznej wy- biera(cid:252) mo(cid:298)emy pomi(cid:266)dzy konstruktorem o parametrach typu float i konstruktorem o para- metrach typu double, na przyk(cid:225)ad: Kup książkęPoleć książkę 510 Java. Techniki zaawansowane Rectangle2D floatRect = new Rectangle2D.Float(5F, 10F, 7.5F, 15F); Rectangle2D doubleRect = new Rectangle2D.Double(5, 10, 7.5, 15); Klasy Xxx2D.Float i Xxx2D.Double s(cid:261) klasami pochodnymi klas Xxx2D. Po utworzeniu obiektu nie ma ju(cid:298) znaczenia, do której z klas pochodnych on nale(cid:298)y. Do przechowywania referen- cji obiektu mo(cid:298)emy wtedy u(cid:298)ywa(cid:252) zmiennej o typie klasy bazowej, tak jak pokazali(cid:286)my to w powy(cid:298)szym przyk(cid:225)adzie. Jak (cid:225)atwo domy(cid:286)li(cid:252) si(cid:266) na podstawie nazw klas Xxx2D.Float i Xxx2D.Double, s(cid:261) one klasa- mi wewn(cid:266)trznymi klas Xxx2D. Rozwi(cid:261)zanie takie ma na celu unikni(cid:266)cie nadmiaru nazw klas zewn(cid:266)trznych. Rysunek 7.3 przedstawia zale(cid:298)no(cid:286)ci pomi(cid:266)dzy klasami reprezentuj(cid:261)cymi figury. Pomini(cid:266)to na nim podklasy Xxx2D.Float i Xxx2D.Double. Tradycyjne klasy dost(cid:266)pne zanim pojawi(cid:225)a si(cid:266) Java 2D zaznaczono na nim za pomoc(cid:261) prostok(cid:261)tów wype(cid:225)nionych kolorem szarym. Rysunek 7.3. Zale(cid:276)no(cid:264)ci pomi(cid:246)dzy klasami reprezentuj(cid:241)cymi figury Kup książkęPoleć książkę Rozdzia(cid:196) 7. (cid:81) Zaawansowane mo(cid:209)liwo(cid:202)ci biblioteki AWT 511 7.2.1. Wykorzystanie klas obiektów graficznych W rozdziale 7. ksi(cid:261)(cid:298)ki Java. Podstawy pokazali(cid:286)my ju(cid:298) sposób wykorzystania klas Rec (cid:180)tangle2D, Ellipse2D i Line2D. Teraz zajmiemy si(cid:266) wi(cid:266)c pozosta(cid:225)ymi klasami. W przypadku klasy RoundRectangle2D musimy okre(cid:286)li(cid:252) wspó(cid:225)rz(cid:266)dne lewego górnego wierz- cho(cid:225)ka figury, jej szeroko(cid:286)(cid:252) i wysoko(cid:286)(cid:252), a tak(cid:298)e szeroko(cid:286)(cid:252) i wysoko(cid:286)(cid:252) obszaru naro(cid:298)nika, który powinien zosta(cid:252) zaokr(cid:261)glony (patrz rysunek 7.4). Na przyk(cid:225)ad wywo(cid:225)anie RoundRectangle2D r = new RoundRectangle2D.Double(150, 200, 100, 50, 20, 20) utworzy obiekt reprezentuj(cid:261)cy prostok(cid:261)t, którego naro(cid:298)niki b(cid:266)d(cid:261) zaokr(cid:261)glone za pomoc(cid:261) (cid:225)uków okr(cid:266)gu o promieniu 20 pikseli. Rysunek 7.4. Parametry prostok(cid:241)tów klasy RoundRectangle2D Tworz(cid:261)c (cid:225)uk, musimy okre(cid:286)li(cid:252) ograniczaj(cid:261)cy go prostok(cid:261)t, k(cid:261)t pocz(cid:261)tkowy, k(cid:261)t rozpinaj(cid:261)cy (cid:225)uku (patrz rysunek 7.5) oraz sposób jego zamkni(cid:266)cia jako jedn(cid:261) z warto(cid:286)ci Arc2D.OPEN, Arc2D.PIE, Arc2D.CHORD. Arc2D a = new Arc2D(x, y, width, height, startAngle, arcAngle, closureType); Rysunek 7.5. Parametry (cid:228)uku klasy Arc2D Rysunek 7.6 pokazuje ró(cid:298)ne rodzaje zamkni(cid:266)cia (cid:225)uku. Kup książkęPoleć książkę 512 Java. Techniki zaawansowane Rysunek 7.6. Rodzaje (cid:228)uków Je(cid:264)li (cid:228)uk jest eliptyczny, to wyznaczenie k(cid:241)tów (cid:228)uku nie jest trywialne. Dokumentacja mówi na ten temat: „K(cid:241)ty podaje si(cid:246) wzgl(cid:246)dem prostok(cid:241)ta ograniczaj(cid:241)cego w taki sposób, (cid:276)e k(cid:241)t 45 stopni zawsze wypada na linii biegn(cid:241)cej ze (cid:264)rodka elipsy do prawego górnego wierzcho(cid:228)ka prostok(cid:241)ta ograniczaj(cid:241)cego. W rezultacie, je(cid:264)li prostok(cid:241)t ograni- czaj(cid:241)cy jest wyra(cid:274)nie d(cid:228)u(cid:276)szy wzd(cid:228)u(cid:276) jednej osi, k(cid:241)ty do pocz(cid:241)tku i ko(cid:254)ca segmentu (cid:228)uku b(cid:246)d(cid:241) zniekszta(cid:228)cone wzd(cid:228)u(cid:276) d(cid:228)u(cid:276)szej osi ograniczenia”. Niestety dokumentacja milczy na temat sposobu wyznaczenia tego zniekszta(cid:228)cenia. A oto szczegó(cid:228)y: Za(cid:228)ó(cid:276)my, (cid:276)e (cid:264)rodkiem (cid:228)uku jest pocz(cid:241)tek uk(cid:228)adu wspó(cid:228)rz(cid:246)dnych, a punkt (x, y) le(cid:276)y na (cid:228)uku. Warto(cid:264)(cid:232) k(cid:241)ta zniekszta(cid:228)conego wyznaczymy wtedy w sposób podany poni(cid:276)ej. skewedAngle = Math.toDegrees(Math.atan2(-y * height, x * width)); Otrzymana warto(cid:264)(cid:232) b(cid:246)dzie nale(cid:276)e(cid:232) do przedzia(cid:228)u od –180 do 180 stopni. W ten sposób musimy obliczy(cid:232) warto(cid:264)(cid:232) pocz(cid:241)tkow(cid:241) i ko(cid:254)cow(cid:241) zniekszta(cid:228)conego k(cid:241)ta (cid:228)uku, a nast(cid:246)p- nie wyznaczy(cid:232) ich ró(cid:276)nic(cid:246). Je(cid:264)li pocz(cid:241)tkowa warto(cid:264)(cid:232) k(cid:241)ta b(cid:241)d(cid:274) ró(cid:276)nica warto(cid:264)ci k(cid:241)ta jest ujemna, to nale(cid:276)y doda(cid:232) do niej 360. Uzyskan(cid:241) warto(cid:264)(cid:232) pocz(cid:241)tkow(cid:241) k(cid:241)ta oraz ró(cid:276)nic(cid:246) warto(cid:264)ci k(cid:241)ta przekazujemy konstruktorowi (cid:228)uku. Uruchamiaj(cid:241)c przyk(cid:228)adowy program zamieszczony na ko(cid:254)cu tego podrozdzia(cid:228)u, mo(cid:276)emy przekona(cid:232) si(cid:246), (cid:276)e opisana powy(cid:276)ej metoda daje w(cid:228)a(cid:264)ciwe wyniki (patrz rysunek 7.9). Java 2D udost(cid:266)pnia krzywe drugiego i trzeciego stopnia. W rozdziale tym nie b(cid:266)dziemy zaj- mowa(cid:252) si(cid:266) matematycznymi podstawami ich dzia(cid:225)ania. Sugerujemy praktyczne zapoznanie si(cid:266) z ich mo(cid:298)liwo(cid:286)ciami za pomoc(cid:261) programu z listingu 7.1. Rysunki 7.7 i 7.8 przedstawiaj(cid:261) krzywe drugiego i trzeciego stopnia, które tworzone s(cid:261) przez okre(cid:286)lenie ich ko(cid:276)ców oraz jednego lub dwu punktów kontrolnych. Zmiana po(cid:225)o(cid:298)enia punktów kontrolnych umo(cid:298)liwia zmian(cid:266) kszta(cid:225)tu krzywych. Kup książkęPoleć książkę Rozdzia(cid:196) 7. (cid:81) Zaawansowane mo(cid:209)liwo(cid:202)ci biblioteki AWT 513 Rysunek 7.7. Krzywa drugiego stopnia Rysunek 7.8. Krzywa trzeciego stopnia Parametrami konstruktorów krzywych drugiego i trzeciego stopnia s(cid:261) wspó(cid:225)rz(cid:266)dne ich ko(cid:276)ców i punktów kontrolnych: QuadCurve2D q = new QuadCurve2D.Double(startX, startY, controlX, controlY, endX, endY); CubicCurve2D c = new CubicCurve2D.Double(startX, startY, control1X, control1Y, control2X, control2Y, endX, endY); Krzywe drugiego stopnia nie s(cid:261) zbyt uniwersalne i dlatego w praktyce stosowane s(cid:261) rzadko. Natomiast krzywe trzeciego stopnia (takie jak krzywe Beziera reprezentowane przez klas(cid:266) CubicCurve2D) wykorzystywane s(cid:261) powszechnie. (cid:224)(cid:261)cz(cid:261)c je w (cid:225)a(cid:276)cuchy, w których koniec jed- nej krzywej jest pocz(cid:261)tkiem nast(cid:266)pnej, mo(cid:298)emy tworzy(cid:252) skomplikowane kszta(cid:225)ty o dowol- nym obrysie. Wi(cid:266)cej informacji na ten temat zawiera ksi(cid:261)(cid:298)ka Computer Graphics: Principles and Practice, Second Edition in C autorstwa Jamesa D. Foleya, Andriesa van Dama, Stevena K. Feinera i in. (Addison-Wesley, 1995). Klasa GeneralPath umo(cid:298)liwia tworzenie dowolnych sekwencji z(cid:225)o(cid:298)onych z odcinków pro- stych oraz krzywych drugiego i trzeciego stopnia. Wspó(cid:225)rz(cid:266)dne pocz(cid:261)tku takiego obiektu okre(cid:286)lamy za pomoc(cid:261) metody moveTo, co pokazano poni(cid:298)ej. GeneralPath path = new GeneralPath(); path.moveTo(10, 20); Nast(cid:266)pnie rozbudowujemy sekwencj(cid:266) o odcinek linii prostej, krzywej drugiego lub trzeciego stopnia, korzystaj(cid:261)c odpowiednio z metod lineTo, quadTo b(cid:261)d(cid:296) curveTo. W przypadku metody lineTo musimy okre(cid:286)li(cid:252) jedynie koniec odcinka. W pozosta(cid:225)ych wypadkach najpierw przeka- zujemy metodom wspó(cid:225)rz(cid:266)dne punktów kontrolnych, a nast(cid:266)pnie wspó(cid:225)rz(cid:266)dne ko(cid:276)ca seg- mentu, na przyk(cid:225)ad: Kup książkęPoleć książkę 514 Java. Techniki zaawansowane path.lineTo(20, 30); path.curveTo(control1X, control1Y, control2X, control2Y, endX, endY); Tworzon(cid:261) sekwencj(cid:266) mo(cid:298)emy zamkn(cid:261)(cid:252), korzystaj(cid:261)c z metody closePath. Rysuje ona odcinek do punktu, którego wspó(cid:225)rz(cid:266)dne zawiera(cid:225)o ostatnie wywo(cid:225)anie metody moveTo. Aby, korzystaj(cid:261)c z obiektu klasy GeneralPath, utworzy(cid:252) wielok(cid:261)t, nale(cid:298)y wywo(cid:225)a(cid:252) metod(cid:266) moveTo, przekazuj(cid:261)c jej wspó(cid:225)rz(cid:266)dne pierwszego wierzcho(cid:225)ka, a nast(cid:266)pnie wywo(cid:225)ywa(cid:252) metod(cid:266) lineTo, podaj(cid:261)c wspó(cid:225)rz(cid:266)dne kolejnych wierzcho(cid:225)ków. Wywo(cid:225)anie metody closePath spo- woduje po(cid:225)(cid:261)czenie ostatniego z wierzcho(cid:225)ków z pierwszym. Tekst (cid:296)ród(cid:225)owy programu z lis- tingu 7.1 pokazuje szczegó(cid:225)y tych operacji. Listing 7.1. shape/ShapeTest.java package shape; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.util.*; import javax.swing.*; /** * Program demonstruj(cid:261)cy tworzenie figur za pomoc(cid:261) Java 2D. * @version 1.02 2007-08-16 * @author Cay Horstmann */ public class ShapeTest { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { JFrame frame = new ShapeTestFrame(); frame.setTitle( ShapeTest ); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); } } /** * Ramka zawieraj(cid:261)ca list(cid:266) rozwijaln(cid:261) wyboru figury * oraz panel, na którym rysowana jest jej reprezentacja. */ class ShapeTestFrame extends JFrame { public ShapeTestFrame() { final ShapeComponent comp = new ShapeComponent(); add(comp, BorderLayout.CENTER); final JComboBox ShapeMaker comboBox = new JComboBox (); comboBox.addItem(new LineMaker()); comboBox.addItem(new RectangleMaker()); Kup książkęPoleć książkę Rozdzia(cid:196) 7. (cid:81) Zaawansowane mo(cid:209)liwo(cid:202)ci biblioteki AWT 515 comboBox.addItem(new RoundRectangleMaker()); comboBox.addItem(new EllipseMaker()); comboBox.addItem(new ArcMaker()); comboBox.addItem(new PolygonMaker()); comboBox.addItem(new QuadCurveMaker()); comboBox.addItem(new CubicCurveMaker()); comboBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { ShapeMaker shapeMaker = comboBox.getItemAt(comboBox.getSelectedIndex()); comp.setShapeMaker(shapeMaker); } }); add(comboBox, BorderLayout.NORTH); comp.setShapeMaker((ShapeMaker) comboBox.getItemAt(0)); pack(); } } /** * Komponent rysuj(cid:261)cy figur(cid:266) * i umo(cid:298)liwiaj(cid:261)cy przesuwanie definiuj(cid:261)cych j(cid:261) punktów. */ class ShapeComponent extends JComponent { private static final int DEFAULT_WIDTH = 300; private static final int DEFAULT_HEIGHT = 200; private Point2D[] points; private static Random generator = new Random(); private static int SIZE = 10; private int current; private ShapeMaker shapeMaker; public ShapeComponent() { addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent event) { Point p = event.getPoint(); for (int i = 0; i points.length; i++) { double x = points[i].getX() - SIZE / 2; double y = points[i].getY() - SIZE / 2; Rectangle2D r = new Rectangle2D.Double(x, y, SIZE, SIZE); if (r.contains(p)) { current = i; return; } } } public void mouseReleased(MouseEvent event) { Kup książkęPoleć książkę 516 Java. Techniki zaawansowane current = -1; } }); addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent event) { if (current == -1) return; points[current] = event.getPoint(); repaint(); } }); current = -1; } /** * Inicjuje obiekt ShapeMaker losowo wybranym zbiorem punktów kontrolnych. * @param aShapeMaker obiekt klasy ShapeMaker definiuj(cid:261)cy figur(cid:266) * za pomoc(cid:261) zbioru punktów kontrolnych. */ public void setShapeMaker(ShapeMaker aShapeMaker) { shapeMaker = aShapeMaker; int n = shapeMaker.getPointCount(); points = new Point2D[n]; for (int i = 0; i n; i++) { double x = generator.nextDouble() * getWidth(); double y = generator.nextDouble() * getHeight(); points[i] = new Point2D.Double(x, y); } repaint(); } public void paintComponent(Graphics g) { if (points == null) return; Graphics2D g2 = (Graphics2D) g; for (int i = 0; i points.length; i++) { double x = points[i].getX() - SIZE / 2; double y = points[i].getY() - SIZE / 2; g2.fill(new Rectangle2D.Double(x, y, SIZE, SIZE)); } g2.draw(shapeMaker.makeShape(points)); } public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, (cid:180)DEFAULT_HEIGHT); } } /** * Klasa abstrakcyjna reprezentuj(cid:261)ca figur(cid:266) * za pomoc(cid:261) zbioru punktów kontrolnych. * Jej konkretne klasy pochodne musz(cid:261) implementowa(cid:252) * metod(cid:266) makeShape zwracaj(cid:261)c(cid:261) dany rodzaj figury. */ Kup książkęPoleć książkę Rozdzia(cid:196) 7. (cid:81) Zaawansowane mo(cid:209)liwo(cid:202)ci biblioteki AWT 517 abstract class ShapeMaker { public abstract Shape makeShape(Point2D[] p); private int pointCount; /** * Tworzy obiekt klasy ShapeMaker. * @param aPointCount liczba punktów kontrolnych definiuj(cid:261)cych figur(cid:266). */ public ShapeMaker(int aPointCount) { pointCount = aPointCount; } /** * Zwraca liczb(cid:266) punktów kontrolnych definiuj(cid:261)cych figur(cid:266). * @return liczba punktów kontrolnych */ public int getPointCount() { return pointCount; } /** * Tworzy figur(cid:266) na podstawie zbioru punktów. * @param p punkty definiuj(cid:261)ce figur(cid:266) * @return zdefiniowana figura */ public String toString() { return getClass().getName(); } } /** * Tworzy odcinek linii prostej (cid:225)(cid:261)cz(cid:261)cy dwa punkty. */ class LineMaker extends ShapeMaker { public LineMaker() { super(2); } public Shape makeShape(Point2D[] p) { return new Line2D.Double(p[0], p[1]); } } /** * Tworzy prostok(cid:261)t rozpi(cid:266)ty za pomoc(cid:261) dwu naro(cid:298)ników. */ class RectangleMaker extends ShapeMaker { public RectangleMaker() { Kup książkęPoleć książkę 518 Java. Techniki zaawansowane super(2); } public Shape makeShape(Point2D[] p) { Rectangle2D s = new Rectangle2D.Double(); s.setFrameFromDiagonal(p[0], p[1]); return s; } } /** * Tworzy zaokr(cid:261)glony prostok(cid:261)t rozpi(cid:266)ty za pomoc(cid:261) dwu naro(cid:298)ników. */ class RoundRectangleMaker extends ShapeMaker { public RoundRectangleMaker() { super(2); } public Shape makeShape(Point2D[] p) { RoundRectangle2D s = new RoundRectangle2D.Double(0, 0, 0, 0, 20, 20); s.setFrameFromDiagonal(p[0], p[1]); return s; } } /** * Tworzy elips(cid:266) zawart(cid:261) w prostok(cid:261)cie ograniczaj(cid:261)cym * rozpi(cid:266)tym za pomoc(cid:261) dwu naro(cid:298)ników. */ class EllipseMaker extends ShapeMaker { public EllipseMaker() { super(2); } public Shape makeShape(Point2D[] p) { Ellipse2D s = new Ellipse2D.Do
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Java. Techniki zaawansowane. Wydanie IX
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ą: