JavaFX

JavaFX
JavaFX
Platformy Technologiczne
Michał Wójcik
[email protected]
http://mwojcik.eti.pg.gda.pl
Katedra Architektury Systemów Komputerowych
Wydział Elektroniki, Telekomunikacji i Informatyki
Politechnika Gdańska
5 marca 2014
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
1 / 22
JavaFX
JavaFX — platforma rozwijająca platformy klienckie Java w celu
umożliwienia łatwego tworzenia i wdrażania aplikacji RIA
zachowujących się tak samo na różnych platformach.
Zalety:
wykorzystanie języka Java,
wykorzystanie tej samej technologii po stronie klienta i serwera,
uruchomienie w różnych środowiskach.
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
2 / 22
Pomocne Źródła I
[1] JavaFX 2.2 Documentation.
http://docs.oracle.com/javafx/2/api/.
[2] The JavaFX Tutorials.
http://docs.oracle.com/javafx/.
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
3 / 22
JavaFX – elementy
Elementy JavaFX 2.2:
Java API,
nowy silnik graficzny:
Prism — hardware accelerated graphics pipeline,
Glass — windowing toolkit;
FXML — deklaratywny język znaczników pozwalający na
tworzenie GUI,
UI controls — baza różnorodnych kontrolek interfejsu użytkownika,
sample applications — przedstawienie różnych możliwości
technologii JavaFX z przykładami kodów.
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
4 / 22
Scene Graph
Scene Graph — punkt startowy dla konstruowania aplikacji JavaFX.
Hierarchiczne drzewo węzłów reprezentujących wizualne elementy.
Rodzaje zawartości:
Nodes — kształty (2-D, 3-D), obrazki, multimedia, tekstu,
kontrolki.
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
5 / 22
Graphics System
Graphics System — obsługuje zarówno grafikę 2-D i 3-D sceny,
zapewnia softwareowe renderowanie w momencie gdy sprzętowe
wsparcie nie jest dostępne.
Prism — obsługuje proces renderowania, może działać zarówno
softwarowo jak i sprzętowo:
DirectX 9 dla Windows XP i Windows Vista,
DirectX 11 dla Windows 7,
OpenGL dla Mac, Linux, Embedded,
Java2D gdy wsparcie sprzętowe nie jest dostępne, dostarczana ze
wszystkimi dystrybucjami JRE.
Quantum Toolkit — łączy Prim i Glass Windowing Toolkit
udostępniając je wyższej warstwie, zarządza regułami obsługi wątków
związanymi z renderowaniem i obsługą zdarzeń.
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
6 / 22
Glass
Glass Windowing Toolkit — dostarcza natywne operacje, takie jak:
zarządzanie oknami, timers, surfaces. Jest warstwą zależną od
platformy, która łączy platformę JavaFX z natywnym systemem.
Zarządza kolejką zdarzeń, wykorzystuje systemową natywną kolejkę
zdarzeń do kolejkowania wątków. Działa w tym samym wątku co
aplikacja JavaFX.
Rodzaje wątków:
JavaFX application thread — główny wątek aplikacji,
wszystkie dostępy do wyświetlanej sceny muszą być realizowane w
tym wątku, nie jest tożsamy z Swing/AWT EDT,
Prism render thread — renderowanie poza obsługą zdarzeń,
pozwala na na renderowanie ramki N gdy przetwarzana jest ramka
N+1,
Media thread — działa w tle, synchronizuje ostatnie ramki za
pomocą scene graph wykorzystując JavaFX application thread.
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
7 / 22
Kontrolki
Kontrolki UI:
realizowane jako węzły sceny,
przenośne pomiędzy platformami,
wygląd modyfikowany poprzez CSS,
javafx.scene.control:
Label,
Button, Radio Button, Toggle Button,
Checkbox, Choice Box,
Text Field, Password Field,
Scroll Bar, Scroll Pane,
List View, Table View,
Separator,
Slider,
Progress Bar, Progress Indicator,
Hyperling,
Tooltip,
HTML Editor,
Titled Pane, Accordion.
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
8 / 22
Data Binding
Konwencja JavaBeans:
public c l a s s Person {
private i n t age ;
public Person ( ) {
age = 0 ;
}
public f i n a l void s e t A g e ( i n t age ) {
t h i s . age = age ;
}
public f i n a l i n t getAge ( ) {
return age ;
}
}
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
9 / 22
Data Binding
Nowa konwencja JavaBeans:
public c l a s s Person {
private I n t e g e r P r o p e r t y age = new S i m p l e I n t e g e r P r o p e r t y ( ) ;
public Person ( ) {
age . s e t ( 0 ) ;
}
public f i n a l void s e t A g e ( i n t age ) {
t h i s . age . s e t ( age ) ;
}
public f i n a l i n t getAge ( ) {
return age . g e t ( ) ;
}
public I n t e g e r P r o p e r t y a g e P r o p e r t y ( ) {
return age ;
}
}
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
10 / 22
Data Binding
Reagowanie na zmianę własności:
Person p = new Person ( ) ;
p . a g e P r o p e r t y ( ) . a d d L i s t e n e r (new C h a n g e L i s t e n e r ( ) {
@Override
public void changed ( O b s e r v a b l e V a l u e o , O b j e c t oldVal ,
O b j e c t new Val ) {
}
}) ;
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
11 / 22
Kolekcje
JavaFX wprowadza rozszerzenie dla standardowych kolekcji
(javafx.collections):
interfejsy:
ObeservableList — lista pozwalająca na śledzenie zmian,
ListChangeListener — otrzymuje notyfikacje o zmianach na liście,
ObservableMap — mapa pozwalająca na śledzenie zmian,
MapChangeListener — otrzymuje notyfikacje o zmianach w mapie;
klasy:
FXCollections — kopia java.util.Collections,
ListChangeListener.Change — zmiany na liście,
MapChangeListener.Change — zmiany w mapie.
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
12 / 22
Layout
Kontenery pozwalają na wygodne i dynamiczne układanie kontrolek UI
na scenie:
BorderPane — regiony: top, bottom ,right, left, center,
HBox — jeden rząd poziomo,
VBox — jeden rząd pionowo,
StackPane — stos, tworzenie skomplikowanych elementów poprzez
składanie,
GridPane — siatka,
FlowPane — następujące po sobie elementy poziomo lub pionowo,
TilePane — siata o elementach w równym rozmiarze,
AnchorPane — zakotwiczenie elementów: top, bottom, left, right,
center.
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
13 / 22
Layout
Zmiana rozmiaru panelu powoduje automatyczną zmianę rozmiarów
niektórych węzłów.
Węzły automatycznie zmieniające rozmiar:
kontrolki UI,
panele.
Węzły nie zmieniające rozmiaru (stałe):
kształty,
item teksty,
grupy.
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
14 / 22
Layout
Rozmiar definiowany przez:
preferred size,
maximum size,
minimum size.
Ułożenie kontrolek w panelu definiowane przez:
HPos — ułożenie w poziomie,
VPos — ułożenie w pionie,
Pos — ułożenie w pionie i poziomie.
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
15 / 22
CSS
Interfejs aplikacji JavaFX może być modyfikowany za pomocą CSS
(Cascading Style Sheet):
zmiana kodu źródłowego nie jest konieczna,
stosowane asynchronicznie,
mogą być zastosowane podczas działania aplikacji,
dynamiczna zmiana wyglądu,
bazuje na W3C CSS v2.1 z wybranymi dodatkami z v3,
własne selektory.
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
16 / 22
CSS
Zastosowanie CSS:
.my-button — klasa MyButton,
#my-button — fx:id="my-button",
.radio-button .dot — styl wypunktowania w RadioButton,
.radio-button:hover.
Działanie:
przedrostek -fx- przy właściwościach,
.root odnosi się do wszystkich elementów na scenie,
void Node.setId(String id) — przypisanie fx-id w kodzie,
void Node.setStyle(String style) — zastosowanie stylu w
kodzie:
button1.setStyle("-fx-background-clor: slateblue;
-fx-text-fill: white;");
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
17 / 22
CSS
Scene s c e n e = new Scene (new Group ( ) , 5 0 0 , 4 0 0 ) ;
s c e n e , g e t S t y l e s h e e t s ( ) . add ( " path / s t y l e s h e e t . c s s " ) ;
. bu tt on {
−fx −f o n t : 16 px " S e r i f " ;
−fx −padding : 1 0 ;
−fx −background−c o l o r : #CCFF99 ;
}
#my−b ut to n {
}
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
18 / 22
FXML
FXML — pozwala na definiowanie interfejsu użytkownika:
oparty na XML,
nie kompilowany,
możliwość tworzenia interfejsu dynamicznie.
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
19 / 22
FXML
BorderPane b o r d e r = new BorderPane ( ) ;
L a b e l l a b e l 1 = new L a b e l ( " Page ␣ T i t l e " ) ;
b o r d e r . setTop ( l a b e l 1 ) ;
L a b e l l a b e l 2 = new L a b e l ( "Some␣ data ␣ h e r e " ) ;
border . setCenter ( l a b e l 2 ) ;
<BorderPane>
<top>
<L a b e l f x : i d=" l a b e l 1 " t e x t=" Page ␣ T i t l e "/>
</top>
<c e n t e r
<L a b e l f x : i d=" l a b e l 2 " t e x t="Some␣ data ␣ h e r e "/>
</ c e n t e r >
</BorderPane>
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
20 / 22
FXML
Parent r o o t =
FXMLLoader . l o a d ( g e t C l a s s ( ) . g e t R e s o u r c e ( " fxml \ _example . fxml " ) ,
ResourceBundle . g e t B u n d l e ( " fxmlexample . fxml \ _example " ) ) ;
public c l a s s FXMLBrowserController implements I n i t i a b l e {
@FXML
Label l a b e l 1 ;
@FXML
Label l a b e l 2 ;
@Override
public void i n i t i a l i z e (URL u r l , ResourceBundle rb ) {
}
}
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
21 / 22
Wdrożenie
Aplikacje JavaFX mogą być uruchomione na trzy sposoby:
samodzielna, uruchamiana jako aplikacja desktopowa,
przez przeglądarkę, aplikacja wbudowana w stronę,
Web Start.
Michał Wójcik (KASK, ETI, PG)
JavaFX
5 marca 2014
22 / 22
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement