Swing Java
description
Transcript of Swing Java
Uniwersytet ŁódzkiWydział Matematyki i Informatyki, Katedra Analizy Nieliniowej
Swing Java
Wykład 8
mgr inż. Michał Misiak
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
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
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
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.
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();
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
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
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
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
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 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
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()
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
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)
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
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ą
Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007
Splash Screen
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; }
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/)
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…)
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); }
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
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 Informatyki UŁ, Katedra Analizy Nieliniowej © 2007
Co dalej …
Aplikacje wielowątkowe Animacje Prezentacja Java w Telekomunikacji Aplikacje sieciowe Wykorzystanie XML i baz danych