okladka

Poznaj tajniki tworzenia efektownych, a jednocześnie funkcjonalnych aplikacji, które przyciągają rzesze klientów

  • Jak tworzyć obrazy i wykorzystywać je w aplikacjach?
  • Jak sterować działaniem animacji?
  • Jak korzystać z grafiki pulpitu dla języka Java?

Informatyka jest dziedziną, która rozwija się w naprawdę szalonym tempie, a użytkownicy komputerów i konsumenci stawiają coraz większe wymagania wszelkim jej produktom. Oczywiście, to, co atrakcyjne, przyciąga, ale równie istotna jest łatwość korzystania z produktu czy intuicyjność jego użytkowania. Współczesny klient oczekuje takiego właśnie idealnego połączenia. Jak tworzyć funkcjonalne, a jednocześnie efektowne aplikacje? Co powoduje, że klienci są zachwyceni i bawią się, używając aplikacji? O tym właśnie jest książka, którą trzymasz w rękach.

W książce "Efekty graficzne i animowane dla aplikacji Desktop Java. Tworzenie atrakcyjnych programów" autorzy w przystępny, a czasami zabawny sposób opisują dostępne technologie do tworzenia bogatych aplikacji. Czytając ją, nauczysz się, jak wykorzystywać grafikę i animację oraz w jakie efekty wyposażyć interfejs użytkownika, aby był naprawdę atrakcyjny. Z tego podręcznika dowiesz się wszystkiego na temat podstawowych mechanizmów języka Java, Swing, Java 2D czy graficznych interfejsów użytkownika (GUI). Poznasz techniki tworzenia aplikacji z bogatym interfejsem użytkownika, którą będziesz mógł wykonać sam, poczynając od szkiców projektu, poprzez implementację różnych elementów, aż do porywającego końcowego efektu!

  • Podstawy grafiki i interfejsów GUI
  • Biblioteki grafiki pulpitu dla języka Java
  • Podstawy renderingu w Swing
  • Java 2D
  • Typy obrazów i ich przetwarzanie
  • Gradienty
  • Animacja
  • Efekty statyczne i dynamiczne
  • Tworzenie własnych efektów
  • Biblioteki - Animated Transitions i Timing Framework

Oto Twoje atrakcyjne aplikacje -- wyjątkowe połączenie estetyki i funkcjonalności oraz milionów zadowolonych klientów!


Słowo wstępne (13)
Przedmowa (15)
Podziękowania (21)
O autorach (23)
Wstęp (25)
Część I: Podstawy grafiki i interfejsów GUI (33)
Rozdział 1. Biblioteki grafiki pulpitu dla języka Java - Swing, AWT oraz Java 2D (35)
  • Abstract Window Toolkit (AWT) (36)
  • Java 2D (37)
  • Swing (37)
Rozdział 2. Podstawy renderingu w Swing (39)
  • Zdarzenia (40)
  • Rysowanie w Swing (41)
    • Asynchroniczne żądania odrysowania (42)
    • Synchroniczne żądania odrysowania (43)
  • Renderowanie w Swing (44)
    • paintComponent() (46)
    • paint() (48)
    • setOpaque() (51)
  • Podwójne buforowanie (52)
  • Wątki (55)
    • Model wątków (57)
    • Stopery a wątek rozsyłania zdarzeń (62)
    • Bezbolesna obsługa wątków poprzez SwingWorker (63)
    • Podsumowanie wątków (66)
Rozdział 3. Podstawy grafiki (67)
  • Java 2D (67)
  • Rendering (69)
    • Pobieranie obiektu Graphics (70)
    • Stan grafiki (72)
    • Elementarne operacje graficzne (97)
Rozdział 4. Obrazy (115)
  • Typy obrazów (116)
  • BufferedImage (119)
  • Skalowanie obrazów (122)
    • Jakość kontra wydajność (125)
    • Metoda getFasterScaledInstance() - narzędzie do szybszego i lepszego skalowania obrazów (134)
Rozdział 5. Wydajność (137)
  • Zastosowanie obcinania (137)
  • Obrazy zapewniające zgodność (143)
    • Dlaczego powinniśmy się nimi zajmować? (143)
    • Co można powiedzieć o obrazach zarządzanych? (145)
    • Zapewnianie zgodności (146)
  • Obrazy zarządzane (148)
    • Odczytywanie danych z DataBuffer (152)
    • Częste renderowanie obrazu (154)
  • Obrazy pośrednie (156)
    • Zasada ogólna (157)
    • Jak to jest realizowane? (157)
    • Uwagi (163)
    • Podsumowanie (165)
  • Optymalne rysowanie figur (165)
  • Testowanie wydajności (167)
  • Opcje wiersza poleceń (167)
    • Renderowanie (169)
    • Debugowanie wydajności (171)
Część II: Renderowanie zaawansowanej grafiki (173)
Rozdział 6. Przezroczystość (175)
  • Obiekt AlphaComposite (175)
  • Obiekt AlphaComposite. 12 reguł (177)
    • Clear (179)
    • Dst (179)
    • DstAtop (179)
    • DstIn (180)
    • DstOut (180)
    • DstOver (181)
    • Src (182)
    • SrcAtop (183)
    • SrcIn (183)
    • SrcOut (183)
    • SrcOver (184)
    • Xor (185)
  • Tworzenie i konfigurowanie obiektu AlphaComposite (186)
  • Typowe zastosowania AlphaComposite (187)
    • Zastosowanie reguły Clear (187)
    • Zastosowanie reguły SrcOver (188)
    • Zastosowanie reguły SrcIn (189)
  • Problemy z użyciem AlphaComposite (191)
  • Tworzenie własnej klasy Composite (193)
    • Tryb mieszania Add (193)
    • Implementowanie CompositeContext (197)
    • Łączenie pikseli (198)
  • Podsumowanie (200)
Rozdział 7. Gradienty (201)
  • Dwuelementowy gradient liniowy (202)
  • Efekty specjalne korzystające ze zwykłych gradientów (204)
  • Wieloelementowy gradient liniowy (208)
  • Gradient kołowy (211)
  • Optymalizacja gradientów (214)
    • Buforowanie gradientu (215)
    • Sprytniejsze buforowanie (216)
    • Optymalizacja z użyciem gradientów cyklicznych (217)
Rozdział 8. Przetwarzanie obrazu (219)
  • Filtry obrazów (219)
  • Przetwarzanie obrazu za pomocą BufferedImageOp (221)
  • AffineTransformOp (223)
  • ColorConvertOp (224)
  • ConvolveOp (226)
    • Tworzenie jądra (228)
    • Praca na krawędzi (229)
  • LookupOp (231)
  • RescaleOp (232)
  • Własna klasa BufferedImageOp (234)
    • Klasa bazowa filtra (234)
    • Filtr barwiący (236)
  • Uwaga na temat wydajności (241)
  • Podsumowanie (242)
Rozdział 9. Szklany panel (243)
  • Rysowanie na szklanym panelu (246)
    • Optymalizacja rysowania na szklanym panelu (247)
  • Blokowanie zdarzeń wejściowych (250)
    • Problemy ze zdarzeniami myszy (251)
Rozdział 10. Panele warstwowe (255)
  • Wykorzystanie paneli warstwowych (256)
  • Porządkowanie komponentów wewnątrz jednej warstwy (260)
  • Panele warstwowe i warstwy (261)
  • Alternatywa dla JLayeredPane w postaci obiektów Layout (262)
Rozdział 11. Zarządca rysowania (267)
  • Gdy Swing staje się zbyt sprytny (267)
  • Poznajemy RepaintManager (269)
    • Zarządzanie obiektami RepaintManager (270)
  • Odbicia i RepaintManager (271)
    • Zapewnienie miejsca na odbicie (272)
    • Rysowanie odbicia (275)
    • Prostszy, przez co sprytniejszy RepaintManager (277)
  • Podsumowanie (280)
Część III: Animacja (281)
Rozdział 12. Podstawy animacji (283)
  • Wszystko o czasie (283)
  • Podstawowe koncepcje (284)
    • Animacja bazująca na ramkach (284)
    • Częstotliwość klatek (286)
    • Ruch bazujący na czasie (286)
  • Mierzenie czasu (oraz narzędzia pomiaru czasu platformy) (293)
    • "Która godzina?" (293)
    • "Czy mogę zamówić budzenie?" (296)
    • "Zadzwoń do mnie ponownie. I ponownie. I ponownie" (298)
  • Rozdzielczość stopera (305)
    • Rozdzielczość System.currentTimeMillis() oraz System.nanoTime() (308)
    • Rozdzielczość usypiania (310)
    • Rozdzielczość stopera (315)
    • Rozwiązanie problemu rozdzielczości (317)
  • Animacje w aplikacjach Swing (318)
    • Grafika animowana (319)
    • Animowany interfejs użytkownika (321)
  • Podsumowanie (331)
Rozdział 13. Płynne przesunięcia (333)
  • Podstawy. Dlaczego moja animacja źle wygląda? (333)
  • Co powoduje "szarpanie" animacji i jak można ją wygładzić? (334)
    • Synchronizacja jest (niemal) wszystkim (335)
    • Kolor - co za różnica? (338)
    • Pionowy powrót plamki - poczucie synchronizacji (348)
  • SmoothMoves - program demonstracyjny (353)
    • Tworzenie obiektów graficznych (353)
    • Uruchamianie stopera (354)
    • Renderowanie (355)
    • Opcje renderowania (356)
  • Podsumowanie (360)
Rozdział 14. Biblioteka Timing Framework. Podstawy (361)
  • Wstęp (361)
  • Podstawowe koncepcje (363)
    • Animator (364)
    • Wywołania zwrotne (366)
    • Czas trwania (368)
    • Powtarzanie (369)
    • Rozdzielczość (370)
    • Operacje startowe (370)
  • Interpolacja (377)
    • Przyspieszenia i opóźnienia (378)
    • Interpolator (383)
  • Podsumowanie (395)
Rozdział 15. Biblioteka Timing Framework. Funkcje zaawansowane (397)
  • Wyzwalacze (398)
    • Koncepcje i wykorzystanie (398)
    • Klasy bazowe wyzwalaczy (400)
    • Wbudowane wyzwalacze (400)
  • Metody ustawiania właściwości (410)
    • PropertySetter (413)
    • Evaluator (417)
    • KeyFrames (419)
  • Podsumowanie (437)
Część IV: Efekty (439)
Rozdział 16. Efekty statyczne (441)
  • Rozmycie (441)
    • Motywacja (441)
    • Proste rozmycie (443)
    • Rozmycie Gaussa (446)
    • Sposób na wydajność (451)
  • Odbicia (452)
    • Motywacja (453)
    • Rysowanie odbić (453)
    • Rozmyte odbicia (454)
  • Rzucanie cieni (455)
    • Motywacja (455)
    • Proste rzucanie cieni (457)
    • Realistyczne rzucanie cieni (459)
  • Wyróżnienia (460)
    • Motywacja (461)
    • Rozjaśnienie (462)
    • Oświetlenie punktowe (464)
    • Podświetlanie tekstu dla zapewnienia lepszej czytelności (466)
  • Wyostrzanie (468)
    • Motywacja (468)
    • Proste wyostrzanie (470)
    • Wyostrzanie selektywne (472)
    • Wyostrzanie zmniejszonych obrazów (473)
  • Podsumowanie (476)
Rozdział 17. Efekty dynamiczne (477)
  • Ruch (478)
    • Motywacja (478)
    • Ruch (480)
  • Zanikanie (483)
    • Motywacja (483)
    • Strategie zanikania (486)
    • Zanikanie przy użyciu AlphaComposite (486)
    • Zanikanie koloru (488)
    • Wzajemne przenikanie (490)
    • Proste zanikanie (490)
  • Pulsowanie (491)
    • Motywacja (491)
    • Poczuj puls (492)
    • Automatyczne podświetlenie (496)
    • Przyspieszony puls (501)
  • Sprężyny (503)
    • Motywacja (504)
    • Gorączka sprężynowania (505)
  • Morfing (508)
    • Motywacja (508)
    • Morfing przycisków (510)
  • Podsumowanie (514)
Rozdział 18. Biblioteka Animated Transitions (515)
  • Płynne animowanie stanu aplikacji (515)
    • Zasada ogólna (516)
  • Płynne przejścia - biblioteka (519)
    • Animacja stanu aplikacji (519)
    • Stany GUI (519)
    • API (520)
    • Efekty (527)
    • Struktura GUI (540)
    • Obrazy i ImageHolder (540)
    • ScreenTransition (542)
  • Płynne przejścia - mechanizmy wewnętrzne, czyli jak zmusić Swing do takich rzeczy (543)
    • Konfigurowanie następnego ekranu - po cichu (544)
    • Animowanie zmian układu (545)
    • Przyspieszanie Swing - wydajność (546)
  • Podsumowanie (546)
Rozdział 19. Narodziny bogatego interfejsu użytkownika (547)
  • Aerith (547)
    • Uruchamianie programu Aerith (548)
    • Organizacja kodu (549)
  • Projekt przepływu sterowania na papierze (549)
  • Wizja (551)
  • Projektowanie ekranu na papierze (553)
  • Makiety (553)
  • Od makiety do kodu (555)
    • Zastosowanie warstw (556)
    • Tryby mieszania (557)
    • Stosowanie prowadnic (558)
  • Ale... ja nie jestem artystą! (559)
  • Wybór ładnych kolorów (561)
  • Książki na temat projektowania (563)
  • Podsumowanie (564)
Zakończenie (565)
Skorowidz (569)