Uniwersytet dzki Wydzia Matematyki i Informatyki Katedra Analizy

  • Slides: 26
Download presentation
Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej Swing Java Wykład 8 mgr

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej Swing Java Wykład 8 mgr inż. Michał Misiak

Plan wykładu Look and Feel n Rozszerzenia Java Swing n Wykorzystanie map w aplikacjach

Plan wykładu Look and Feel n Rozszerzenia Java Swing n Wykorzystanie map w aplikacjach n Netbeans 6. 0 n Google Android n Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Możliwości Java Swing Aplikacja z Java Sun Tutorial prezentująca możliwości Java Swing. Aplikacja zawiera

Możliwości Java Swing Aplikacja z Java Sun Tutorial prezentująca możliwości Java Swing. Aplikacja zawiera kod dzięki czemu można podejrzeć wykonanie poszczególnych elementów. Źródło: Java Web Start: http: //java. sun. com/products/jfc/jws/Swing. Set 2. jnlp Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Look and Feel n n n Możliwość definiowania wyglądu i zachowania aplikacji niezależnie od

Look and Feel n n n Możliwość definiowania wyglądu i zachowania aplikacji niezależnie od platformy Użycie l’n’f pozwala skupić się programiście na logice aplikacji oferując zbiór różnych wyglądów Swing pozwala na stosowanie l’n’f dzięki podzieleniu JComponent na dwie cześci: ¨ ¨ n n podklasa JComponent i powiązana klasa Component. UI jest rzadko używany przez programistów i standardowo jest dziedziczony z JComponent. Odrysowanie komponentu delegowane jest do UI. Przygotowanie l’n’f wiąże się z implementacją dla każdego komponentu Swing odpowiedniej delegaty UI. Np. dla JTabbed. Pane jest delegata: Metal. Tabbed. Pane. UI Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Look and Feel (2) n n Cross. Platform. Look. And. Feel – jest to

Look and Feel (2) n n Cross. Platform. Look. And. Feel – jest to "Java L&F" zwany również „Metal”. Wygląda tak samo na wszystkich platformach. Jest to cześć Java API (javax. swing. plaf. metal) i jest standardowo ustawiany w przypadku braku wyboru innych preferencji. Systemowy Look. And. Feel – aplikacja używa natywnego L&F dla systemu, na którym jest uruchomiona. Systemowy L&F jest określany w momencie uruchomienia aplikacji. Synth – jest to bazowy L&F do tworzenia własnych L&F z wykorzystaniem XML Multiplexing – L&F, który składa się z wielu L&F przypisanych różnym komponentom w tym samym czasie. Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Ustawianie L&F n n n Ustawienie L&F powinno się odbywać jako pierwsze W momencie

Ustawianie L&F n n n Ustawienie L&F powinno się odbywać jako pierwsze W momencie tworzenie danego komponentu, komponent pyta się UI manager o delegatę L&F, która implementuje wygląd komponentu Ustawienie L&F realizowane jest w następującej metodzie: ¨ n L&F może być również wyspecyfikowany w linii poleceń przy uruchamianiu programu: ¨ n UIManager. set. Look. And. Feel() ava -Dswing. defaultlaf=com. sun. java. swing. plaf. gtk. GTKLook. And. Feel My. App Zmiana L&F. Powinna zostać wywołana poniższa metoda na jednym z tzw. top-level komponentów: ¨ ¨ ¨ UIManager. set. Look. And. Feel(lnf. Name); Swing. Utilities. update. Component. Tree. UI(frame); frame. pack(); Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Tematy w L&F Tematy pozwalają w łatwy sposób modyfikować kolory oraz czcionki L&F. n

Tematy w L&F Tematy pozwalają w łatwy sposób modyfikować kolory oraz czcionki L&F. n Np. dla L&F Metal można wybrać następujące tematy: n ¨ Default. Metal, ¨ Ocean, ¨ Test Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Synth Look and Feel n n Modyfikacja istniejących L&F lub pisanie własnego jest trudnym

Synth Look and Feel n n Modyfikacja istniejących L&F lub pisanie własnego jest trudnym zadaniem Do łatwego tworzenia własnych L&F może być użyty pakiet javax. swing. plaf. synth L&F może być tworzony po przez programowanie lub w pliku XML Z synth tworzony jest de facto wygląd, natomiast zachowanie nadaje synth Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Przykład modyfikacji synth Przykład: Rozkład Regionów dla JScroll n n n Synth dostarcza wszystkie

Przykład modyfikacji synth Przykład: Rozkład Regionów dla JScroll n n n Synth dostarcza wszystkie Component. UI Programista ma określić wyłączenie w jaki sposób komponent jest rysowany Synth operuje na poziomie niższym niż komponent na poziomie tzw. „regionów” Synth. Look. And. Feel laf = new Synth. Look. And. Feel(); laf. load(My. Class. class. get. Resource. As. Stream("laf. xml "), My. Class. class); UIManager. set. Look. And. Feel(laf ); Źródło: http: //java. sun. com/docs/books/tutorial/uiswing/lookandfeel/synth. html Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Modyfikacja Synth w XML i w programie W kodzie programu class Moja. Fabr. Stylow

Modyfikacja Synth w XML i w programie W kodzie programu class Moja. Fabr. Stylow extends Synth. Style. Factory { public Synth. Style get. Style(JComponent c, Region id) { if (id == Region. BUTTON) { return button. Style; } else if (id == Region. TREE) { return tree. Style; } return default. Style; } } Synth. Look. And. Feel laf = new Synth. Look. And. Feel(); UIManager. set. Look. And. Feel(laf); Synth. Look. And. Feel. set. Style. Factory(new My. Style. Factory()); W pliku XML <synth> <style id="basic. Style"> <font name="Verdana" size="16"/> <state> <color value="WHITE" type="BACKGROUND"/> <color value="BLACK" type="FOREGROUND"/> </state> </style> <bind style="basic. Style" type="region" key=". *"/> </synth> Uwaga! Więcej na temat tworzenia własnych L&F z Synth pod linkiem: http: //java. sun. com/docs/books/tutorial/uiswing/lookandfeel/synth. html Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Zaawansowane l’n’f: substance Przykładowy l’n’f: Substance. Źródło: https: //substance. dev. java. net/ Wydział Matematyki

Zaawansowane l’n’f: substance Przykładowy l’n’f: Substance. Źródło: https: //substance. dev. java. net/ Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Inne funkcjonalności Java Swing n n n Desktop – możliwa interakcję aplikacji ze standardowymi

Inne funkcjonalności Java Swing n n n Desktop – możliwa interakcję aplikacji ze standardowymi aplikacjami skojarzonymi ze specyficznymi typami plików na komputerze, na którym została ona uruchomiona Actions – możliwość koordynacji stanu i obsługi zdarzeń dla większej liczby komponentów generujących zdarzenia actions. Timer – możliwość implementacji wątku, który wykonuje akację cyklicznie z jakimś opóźnieniem Focus – możliwość personalizacji sposobu ustawiania fokusu w aplikacjach w celu dokonania specyficznego przejścia po polach, walidacji, etc… Key Bindings – możliwość ustawienia sposobu reakcji na klawiaturę Wykorzystanie System Tray Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Integracja z aplikacjami n n n Java 6 umożliwia integrację z aplikacji Javy z

Integracja z aplikacjami n n n Java 6 umożliwia integrację z aplikacji Javy z aplikacjami natywnymi uwzględniając aspekt wydajności Integracja realizowana jest po przez Java Desktop API (java. awt. Desktop). Dekstop API wyrosło z projektu JDesktop Integration Components (JDIC) Funkcjonalność oferowana przez Java Desktop API Uruchamianie specyficznej dla systemu przeglądarki ze wskazanym URL ¨ Uruchamianie standardowego klienta poczty elektronicznej ¨ Uruchamianie aplikacji w celu otwarcia, edycji, wydrukowania plików skojarzonych z tymi aplikacjami ¨ n n Dostępność Desktop API: is. Desktop. Supported() Jeśli Dekstop API wspierane można pobrać obiekt Desktop: get. Desktop() Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Java Desktop API n Akcje które mogą być realizowane przez Java Dekstop API: ¨

Java Desktop API n Akcje które mogą być realizowane przez Java Dekstop API: ¨ ¨ ¨ n BROWSE MAIL OPEN EDIT PRINT Różne aplikacje mogą być zarejestrowane dla powyższych akcji Źródło: http: //java. sun. com/docs/books/tutorial/uiswing/misc/desktop. html Obsługa akcji BROWSE private void on. Launch. Browser(Action. Event evt) { URI uri = null; try { uri = new URI(txt. Browser. URI. get. Text ()); desktop. browse(uri); } catch(IOException ioe) { //TO DO Exception }catch(URISyntax. Exception use) { //use. print. Stack. Trace(); } } Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

System Tray n n System Tray – obszar w którym mogą być uruchamiane aplikacje.

System Tray n n System Tray – obszar w którym mogą być uruchamiane aplikacje. Obszar ten jest przez nie współdzielony Np. w Windows jest to System Tray odnosi się do paska, a w GNOME rozumiany jest jak obszar powiadomień (notification area). System Tray wprowadzony w Java 6 obsługiwany przez pakiet java. awt. System. Tray dostęp do System Tray po przez metodę: System. Tray. get. System. Tray() ¨ Zalecane wywołanie metody is. Supported() ¨ n Dodawanie/Usuwanie ikon do Tray: ¨ add(java. awt. Tray. Icon) Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

System Tray (2) n Możliwość wyświetlenia: ¨ ¨ ¨ n n podpowiedzi (Text Tool.

System Tray (2) n Możliwość wyświetlenia: ¨ ¨ ¨ n n podpowiedzi (Text Tool. Tip) pop-up menu dymku z wiadomością Dostępny jest szereg nasłuchiwaczy i zdarzeń generowanych dla myszki Część zdarzeń wykonywana jest samoczynnie. final Popup. Menu pop-up = new Popup. Menu(); final Tray. Icon tray. Icon = new Tray. Icon( create. Image(„ikona. gif", „ikona z tray")); final System. Tray tray = System. Tray. get. System. Tray (); //tworznie menu Menu. Item 1 = new Menu. Item(„O aplikacji"); pop-up. add(Item 1) tray. Icon. set. Popup. Menu(pop-up ); kliknięcie na ikonę powoduje rozwinięcie pop-up menu. ¨ podwójne kliknięcie powoduje wygenerowanie zdarzenia Action. Event ¨ Więcej! http: //java. sun. com/docs/books/tutorial/uiswing/misc/systemtray. html Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Splash Screen n Jest to ekran pojawiający się przeważnie w następujących sytuacjach: ¨ ¨

Splash Screen n Jest to ekran pojawiający się przeważnie w następujących sytuacjach: ¨ ¨ n n n Wskazanie, że aplikacja uruchamia się Prezentacja informacji, która powinna być wyświetlona jednokrotnie Ze względu na cel w jakim stworzono Splash Screen opóźnienie związane z jego uruchomieniem powinno być minimalne, ale za nim zostanie wyświetlony wymagane jest uruchomienie JVM, załadowanie Swing i AWT Java 6 pozwala na wyświetlenie SS za nim zostanie uruchomiona JVM Możliwość wyświetlenia obrazu w formacie: gif, jpg, png z przeźroczystością i animacją Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Splash Screen Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Splash Screen Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Obsługa Splash Screen n Funkcjonalność oferowana w klasie Splash. Screen: Zamknięcie ekranu ¨ Zmiana

Obsługa Splash Screen n Funkcjonalność oferowana w klasie Splash. Screen: Zamknięcie ekranu ¨ Zmiana wyświetlanej grafiki ¨ Uzyskanie pozycji i wielkości obrazu ¨ Rysowanie na SS ¨ n Brak możliwości utworzenia instancji obiektu przez aplikację. Uzyskanie dostępu do SS po przez metodę: ¨ final Splash. Screen splash = Splash. Screen. get. Splash. Screen (); if (splash == null) { System. out. println( "Splash. Screen. get. Splash. Screen ()" + " zwrocil null"); return; } Graphics 2 D g = splash. create. Graphics(); if (g == null) { System. out. println("g is null"); return; } get. Splash. Screen() Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Wykorzystanie map w aplikacjach n n Wzbogacenie aplikacji o przetwarzanie danych geograficznych Popularyzacja Google

Wykorzystanie map w aplikacjach n n Wzbogacenie aplikacji o przetwarzanie danych geograficznych Popularyzacja Google Maps w technice AJAX Mapy w Swing – projekt open source o nazwie JXMap. Viewer rozwijany w Swinglabs (http: //www. swinglabs. org/) Organizacje dostarczające mapy: NASA's Blue Marble satellite (http: //earthobservatory. nasa. gov/Newsroom/Blue. Marble/) ¨ Open. Street. Map. org (http: //www. openstreetmap. org/) ¨ Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Budowa i użycie JXMap. Viewer n n JXMap. Viewer jest to JPanel, który wie

Budowa i użycie JXMap. Viewer n n JXMap. Viewer jest to JPanel, który wie jak załadować mapy z serwera z obrazami, jak łączyć obrazy, przekształcać współrzędne geograficzne, etc … JXMap. Viewer znajduje się w wersji 6 Netbeans 6 dostarcza również kilka nowych funkcjonalności ułatwiających tworzenie takiej aplikacji. Bardziej rozbudowaną funkcjonalność posiada JXMap. Kit (suwaki do manipulowania mapą) JXMap. Kit posiada zestaw Properties pozwalający na modyfikację poszczególnych elementów (suwaki, podgląd mapy, etc…) Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Użycie JXMap. Kit n n Modyfikacja lokalizacji – przesuwanie mapy: set. Address. Location() Przykład

Użycie JXMap. Kit n n Modyfikacja lokalizacji – przesuwanie mapy: set. Address. Location() Przykład ustawienia lokalizacja na Łódź: ¨ n n j. XMap. Kit 1. set. Address. Location(ne w Geo. Position(41. 881944, 87. 627778)); Geo. Position przyjmuje jako parametr wartości szerokości i wysokości geograficznej Pobranie określonej lokalizacji na mapie przy pomocy metody: ¨ public void add. Waypoint() { //tworzenie zbioru punktow Set<Waypoint> waypoints = new Hash. Set<Waypoint>(); waypoints. add(new waypoint(41. 881944, -87. 627778)); waypoints. add(new Waypoint(40. 716667, -74)); //Waypoint. Painter odrysowuje punkty Waypoint. Painter painter = new Waypoint. Painter(); painter. set. Waypoints(waypoints ); j. XMap. Kit 1. get. Main. Map(). set. Overlay. Painter(painter ); } get. Center. Position() Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Przeładowanie standardowego sposobu rysowania punktów Painter. set. Waypoints(waypoints); painter. set. Renderer(new Waypoint. Renderer() {

Przeładowanie standardowego sposobu rysowania punktów Painter. set. Waypoints(waypoints); painter. set. Renderer(new Waypoint. Renderer() { public boolean paint. Waypoint(Graphics 2 D g, JXMap. Viewer map, Waypoint wp) { g. set. Color(Color. RED); g. draw. Line(-5, +5, +5); g. draw. Line(-5, +5, -5); return true; } }); j. XMap. Kit 1. get. Main. Map(). set. Overlay. Painter(painter); Źródło: http: //today. java. net/pub/a/today/2007/10/30/building-maps-into-swing-app-with-jxmapviewer. html Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Przykład Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Przykład Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Android – projekt Google Mobile Phone http: //code. google. com/android/adc. html Wydział Matematyki i

Android – projekt Google Mobile Phone http: //code. google. com/android/adc. html Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Co dalej … Aplikacje wielowątkowe n Animacje n Prezentacja Java w Telekomunikacji n Aplikacje

Co dalej … Aplikacje wielowątkowe n Animacje n Prezentacja Java w Telekomunikacji n Aplikacje sieciowe n Wykorzystanie XML i baz danych n Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007