1 / 26

Swing Java

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

bella
Download Presentation

Swing Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Swing Java Wykład 8 mgr inż. Michał Misiak

  2. Plan wykładu • Look and Feel • Rozszerzenia Java Swing • Wykorzystanie map w aplikacjach • Netbeans 6.0 • Google Android

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

  4. 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

  5. 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.

  6. 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();

  7. 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

  8. 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

  9. 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” Przykład modyfikacji synth Przykład: Rozkład Regionów dla JScroll SynthLookAndFeel laf = new SynthLookAndFeel(); laf.load(MyClass.class.getResourceAsStream("laf.xml"), MyClass.class); UIManager.setLookAndFeel(laf); Źródło: http://java.sun.com/docs/books/tutorial/uiswing/lookandfeel/synth.html

  10. Modyfikacja Synth w XML i w programie W kodzie programu W pliku XML 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> 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

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

  12. 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

  13. 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()

  14. 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 Java Desktop API Źródło: http://java.sun.com/docs/books/tutorial/uiswing/misc/desktop.html Obsługa akcji BROWSE private 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(); } }

  15. 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)

  16. 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 System Tray (2) final PopupMenu pop-up = new PopupMenu(); final TrayIcon trayIcon = new TrayIcon( createImage(„ikona.gif", „ikona z tray")); final SystemTray tray = SystemTray.getSystemTray(); //tworznie menu MenuItem 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

  17. 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ą

  18. Splash Screen

  19. 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() Obsługa Splash Screen 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; }

  20. 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/)

  21. 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…)

  22. Modyfikacja lokalizacji – przesuwanie mapy: setAddressLocation() Przykład ustawienia lokalizacja na Łódź: jXMapKit1.setAddressLocation(new 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() Użycie JXMapKit 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); }

  23. 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

  24. Przykład

  25. Android – projekt Google Mobile Phone http://code.google.com/android/adc.html

  26. Co dalej … • Aplikacje wielowątkowe • Animacje • Prezentacja Java w Telekomunikacji • Aplikacje sieciowe • Wykorzystanie XML i baz danych

More Related