Swing Java

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

description

Swing Java. Wykład 8. mgr inż. Michał Misiak. Plan wykładu. Look and Feel Rozszerzenia Java Swing Wykorzystanie map w aplikacjach Netbeans 6.0 Google Android. Możliwości Java Swing. Aplikacja z Java Sun Tutorial prezentująca możliwości Java Swing. Aplikacja - PowerPoint PPT Presentation

Transcript of Swing Java

Page 1: Swing Java

Uniwersytet ŁódzkiWydział Matematyki i Informatyki, Katedra Analizy Nieliniowej

Swing Java

Wykład 8

mgr inż. Michał Misiak

Page 2: Swing Java

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

Plan wykładu

Look and Feel Rozszerzenia Java Swing Wykorzystanie map w aplikacjach Netbeans 6.0 Google Android

Page 3: Swing Java

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. Aplikacjazawiera 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/SwingSet2.jnlp

Page 4: Swing Java

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

Look and Feel

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: podklasa JComponent i powiązana klasa ComponentUI.

ComponentUI 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 JTabbedPane jest delegata: MetalTabbedPaneUI

Page 5: Swing Java

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

Look and Feel (2)

CrossPlatformLookAndFeel – 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 LookAndFeel – 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.

Page 6: Swing Java

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

Ustawianie L&F

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:

UIManager.setLookAndFeel() L&F może być również wyspecyfikowany w linii poleceń przy

uruchamianiu programu: ava -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel

MyApp Zmiana L&F. Powinna zostać wywołana poniższa metoda na jednym

z tzw. top-level komponentów: UIManager.setLookAndFeel(lnfName); SwingUtilities.updateComponentTreeUI(frame); frame.pack();

Page 7: Swing Java

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.

Np. dla L&F Metal można wybrać następujące tematy: DefaultMetal, Ocean, Test

Page 8: Swing Java

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

Synth Look and Feel

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

Page 9: Swing Java

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

Przykład modyfikacji synth

Synth dostarcza wszystkie ComponentUI

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”

Źródło: http://java.sun.com/docs/books/tutorial/uiswing/lookandfeel/synth.html

SynthLookAndFeel laf = new SynthLookAndFeel(); laf.load(MyClass.class.getResourceAsStream("laf.xml"), MyClass.class); UIManager.setLookAndFeel(laf);

Przykład: Rozkład Regionów dla JScroll

Page 10: Swing Java

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

Modyfikacja Synth w XML i w programie

class MojaFabrStylow extends SynthStyleFactory { public SynthStyle getStyle(JComponent c, Region id) { if (id == Region.BUTTON) { return buttonStyle; } else if (id == Region.TREE) { return treeStyle; } return defaultStyle; } } SynthLookAndFeel laf = new SynthLookAndFeel(); UIManager.setLookAndFeel(laf); SynthLookAndFeel.setStyleFactory(new MyStyleFactory());

<synth> <style id="basicStyle"> <font name="Verdana" size="16"/> <state> <color value="WHITE" type="BACKGROUND"/> <color value="BLACK" type="FOREGROUND"/> </state> </style> <bind style="basicStyle" type="region" key=".*"/></synth>

W pliku XMLW kodzie programu

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

Page 11: Swing Java

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/

Page 12: Swing Java

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

Inne funkcjonalności Java Swing

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

Page 13: Swing Java

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

Integracja z aplikacjami

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 Dostępność Desktop API: isDesktopSupported() Jeśli Dekstop API wspierane można pobrać obiekt Desktop:

getDesktop()

Page 14: Swing Java

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

Java Desktop API Akcje które mogą być realizowane

przez Java Dekstop API: BROWSE MAIL OPEN EDIT PRINT

Różne aplikacje mogą być zarejestrowane dla powyższych akcji

Obsługa akcji BROWSEprivate void onLaunchBrowser(ActionEvent evt) { URI uri = null; try { uri = new URI(txtBrowserURI.getText()); desktop.browse(uri); } catch(IOException ioe) { //TO DO Exception }catch(URISyntaxException use) { //use.printStackTrace(); } }

Źródło: http://java.sun.com/docs/books/tutorial/uiswing/misc/desktop.html

Page 15: Swing Java

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

System Tray

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.SystemTray dostęp do System Tray po przez metodę:

SystemTray.getSystemTray() Zalecane wywołanie metody isSupported()

Dodawanie/Usuwanie ikon do Tray: add(java.awt.TrayIcon)

Page 16: Swing Java

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

System Tray (2)

Możliwość wyświetlenia: podpowiedzi (Text ToolTip) pop-up menu dymku z wiadomością

Dostępny jest szereg nasłuchiwaczy i zdarzeń generowanych dla myszki

Część zdarzeń wykonywana jest samoczynnie. kliknięcie na ikonę powoduje

rozwinięcie pop-up menu. podwójne kliknięcie powoduje

wygenerowanie zdarzenia ActionEvent

final PopupMenu pop-up = new PopupMenu();

final TrayIcon trayIcon = new TrayIcon( createImage(„ikona.gif", „ikona z tray"));final SystemTray tray = SystemTray.getSystemTray();//tworznie menuMenuItem Item1 = new MenuItem(„O aplikacji");pop-up.add(Item1)

trayIcon.setPopupMenu(pop-up);

Więcej! http://java.sun.com/docs/books/tutorial/uiswing/misc/systemtray.html

Page 17: Swing Java

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

Splash Screen

Jest to ekran pojawiający się przeważnie w następujących sytuacjach: 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ą

Page 18: Swing Java

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

Splash Screen

Page 19: Swing Java

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

Obsługa Splash Screen

Funkcjonalność oferowana w klasie SplashScreen: Zamknięcie ekranu Zmiana wyświetlanej grafiki Uzyskanie pozycji i wielkości

obrazu Rysowanie na SS

Brak możliwości utworzenia instancji obiektu przez aplikację. Uzyskanie dostępu do SS po przez metodę: getSplashScreen()

final SplashScreen splash = SplashScreen.getSplashScreen(); if (splash == null) { System.out.println(

"SplashScreen.getSplashScreen()" + " zwrocil null"); return; } Graphics2D g = splash.createGraphics(); if (g == null) { System.out.println("g is null"); return; }

Page 20: Swing Java

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

Wykorzystanie map w aplikacjach

Wzbogacenie aplikacji o przetwarzanie danych geograficznych

Popularyzacja Google Maps w technice AJAX Mapy w Swing – projekt open source o nazwie

JXMapViewer rozwijany w Swinglabs (http://www.swinglabs.org/)

Organizacje dostarczające mapy: NASA's Blue Marble satellite

(http://earthobservatory.nasa.gov/Newsroom/BlueMarble/) OpenStreetMap.org (http://www.openstreetmap.org/)

Page 21: Swing Java

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

Budowa i użycie JXMapViewer

JXMapViewer jest to JPanel, który wie jak załadować mapy z serwera z obrazami, jak łączyć obrazy, przekształcać współrzędne geograficzne, etc …

JXMapViewer znajduje się w wersji 6 Netbeans. Netbeans 6 dostarcza również kilka nowych funkcjonalności ułatwiających tworzenie takiej aplikacji.

Bardziej rozbudowaną funkcjonalność posiada JXMapKit (suwaki do manipulowania mapą)

JXMapKit posiada zestaw Properties pozwalający na modyfikację poszczególnych elementów (suwaki, podgląd mapy, etc…)

Page 22: Swing Java

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

Użycie JXMapKit

Modyfikacja lokalizacji – przesuwanie mapy: setAddressLocation()

Przykład ustawienia lokalizacja na Łódź: jXMapKit1.setAddressLocation(ne

w GeoPosition(41.881944,-87.627778));

GeoPosition przyjmuje jako parametr wartości szerokości i wysokości geograficznej

Pobranie określonej lokalizacji na mapie przy pomocy metody: getCenterPosition()

public void addWaypoint() { //tworzenie zbioru punktow Set<Waypoint> waypoints = new HashSet<Waypoint>(); waypoints.add(new waypoint(41.881944,-87.627778)); waypoints.add(new Waypoint(40.716667,-74)); //WaypointPainter odrysowuje punkty WaypointPainter painter = new WaypointPainter(); painter.setWaypoints(waypoints); jXMapKit1.getMainMap(). setOverlayPainter(painter); }

Page 23: Swing Java

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

Przeładowanie standardowego sposobu rysowania punktów

Painter.setWaypoints(waypoints); painter.setRenderer(new WaypointRenderer() { public boolean paintWaypoint(Graphics2D g, JXMapViewer map, Waypoint wp) { g.setColor(Color.RED); g.drawLine(-5,-5,+5,+5); g.drawLine(-5,+5,+5,-5); return true; } });

jXMapKit1.getMainMap().setOverlayPainter(painter);

Źródło: http://today.java.net/pub/a/today/2007/10/30/building-maps-into-swing-app-with-jxmapviewer.html

Page 24: Swing Java

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

Przykład

Page 25: Swing Java

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

Android – projekt Google Mobile Phone

http://code.google.com/android/adc.html

Page 26: Swing Java

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

Co dalej …

Aplikacje wielowątkowe Animacje Prezentacja Java w Telekomunikacji Aplikacje sieciowe Wykorzystanie XML i baz danych