• Nie Znaleziono Wyników

Swing Java

N/A
N/A
Protected

Academic year: 2021

Share "Swing Java"

Copied!
26
0
0

Pełen tekst

(1)

Uniwersytet Łódzki

Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej

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)

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

(10)

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 XML W 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

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

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 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) {

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

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

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 menu

MenuItem Item1 = new MenuItem(„O aplikacji");

pop-up.add(Item1)

trayIcon.setPopupMenu(pop-up);

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

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;

}

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

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);

}

(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

Cytaty

Powiązane dokumenty

uczyć brzeg wspólny (fotografia), Agata Witkowska doesn’t care (fotografia), Tomasz Bieńkowski mirrors (linoryt) i zastanawiają się, biorąc pod uwagę pytanie zawarte w temacie,

Jeśli żadna orbita nie jest jednoelementowa, to rozmiar każdej jest podzielny przez p, zatem i |M| jest podzielna przez p.. Zamiast grafów można podobnie analizować

Jeśli żadna orbita nie jest jednoelementowa, to rozmiar każdej jest podzielny przez p, zatem i |M| jest podzielna przez p. Zamiast grafów można podobnie analizować

Dodawanie jest działaniem dwuargumentowym, w jednym kroku umiemy dodać tylko dwie liczby, więc aby dodać nieskończenie wiele liczb, trzeba by wykonać nieskończenie wiele kroków,

przykładem jest relacja koloru zdefiniowana na zbiorze wszystkich samochodów, gdzie dwa samochody są w tej relacji, jeśli są tego samego koloru.. Jeszcze inny przykład to

też inne parametry algorytmu, często zamiast liczby wykonywanych operacji rozważa się rozmiar pamięci, której używa dany algorytm. Wówczas mówimy o złożoności pamięciowej;

Jeśli natomiast szereg jest zbieżny, ale nie bezwzględnie, to permutując jego wyrazy możemy uzyskać szereg zbieżny o dowolnej sumie albo szereg rozbieżny 5.. 4 Używam tu

Jeżeli jakieś dane em ­ piryczne przemawiają przeciw jednej lub drugiej teorii, powstały konflikt traktuje się jako dowód na to, że teoria nie stosuje się do sytuacji,