Professional Documents
Culture Documents
Szorakoztato JavaFX1
Szorakoztato JavaFX1
Elektronikai Eszkzk
Programozsa
A JavaFX platform bemutatsa
Dr. Ekler Pter
peter.ekler@aut.bme.hu
Pldk elrhetsge (GIT)
https://github.com/peekler/JavaFX-BME
Krds
Mi az albbi kd futtatsnak eredmnye?
}
Tartalom
A JavaFX trtnete s jvje
JavaFX architektrja
A fejlesztkrnyezet kialaktsa
A Java s a JavaFX kapcsolata
JavaFX alkalmazsok teleptse
Hello JavaFX
Felhasznli fellet kialaktsa
Bevezets
A Java technolgia sok, klnbz krnyezetben
elrhet (desktop, web, mobil, blu-ray, stb.), ez a
technolgia egyik legfbb jellemzje
Oracle felvsrolta a Sun Microsystems-t
Java elavult felhasznli fellet szempontjbl (Swing,
Awt)
Megvltozott a felhasznli igny, szebb, ltvnyosabb
elemekre van szksg
JavaFX: a Java vlasza a megvltozott ignyekre
A JavaFX fbb jellemzi
Java kliens platform j genercija
Gazdag felhasznli fellet s RIA (Rich Internet
Application) tmogats
Konzisztens mkds tbb platformon
Gazdag Java alap API grafikai s mdia
tmogatsra
Hardware tmogats
Szleskr mdia tmogats
A JavaFX trtnete 1/2
A 2007-es JavaOne konferencin mutatta be a
Sun Microsystems
Ltvnyos alkalmazsok fejlesztse mobil
kszlkekre, asztali szmtgpekre, TV-kre s
egyb multimdia eszkzkre
Kezdetben JavaFX mobil platform s JavaFX
script nyelv
1.3-as verzi: 2010. prilis 22.
JavaFX mint script nyelv
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
Stage {
width: 250
Elavult
height: 80
scene: Scene {
content: Text {
font : Font {
size : 24
x: 10, y: 30
}
A JavaFX trtnete 2/2
Oracle felvsrolja a Sun Microsystems-t
A 2010-es JavaOne konferencin bejelentik, hogy nem
tmogatjk tovbb a JavaFX script nyelvet, de(!) A
JavaFX-et igen
A JavaFX API-k Java API-k formjban elrhetk
lesznek a 2.0-s verziban
Legfrissebb verzi: 2.2
Nem kell j nyelvet megtanulnia a fejlesztknek
Oracle tovbbra is a JavaFX-et tmogatja, mint
elsszm gazdag UI-t tmogat eszkz
Az j verzi elnyei
Jl ismert Java nyelv hasznlata (korbban
JavaFX scriptnyelv volt)
Gyorsan megtanulhat, Java fejlesztket
knnyebb tallni
Java-ban megismert osztlyknyvtr
hasznlhat
Fejlesztsi kltsg cskken
Legismertebb fejlesztkrnyezetek tmogatjk
(pl. NetBeans, Eclipse, IntelliJ Idea)
A JavaFX 2.0 jdonsgai 1/2
Java API tmogats:
> Jl ismert nyelvi eszkzk (generics, annotcik, tbbszlsg)
> Megszokott fejleszteszkzk hasznlata
j grafikus motor:
> Grafikus hardware gyorstst hasznl motor (Prism) j ablakkezel eszkzzel (Glass)
> Gyors s ltvnyos UI kszts
Bngsz plug-in:
> Prism alap JavaFX appletek tmogatsa
Rengeteg UI vezrl
> Diagramok, tblk, menk, j layoutok, stb.
> sszes ismert UI vezrl
Mdia szl:
> Httrben fut
> Szinkronizcis feladatok
Pulse
Esemny, mely jelzi, hogy a JavaFX Scnene Graph
vltozott, ideje frissteni
> Animcik
> Scene Graph elem vltozs
> CSS vltozs
Maximum 60 frame/sec sebessg
Manulisan is kivlthat
Glass Windowing Toolkit felelssge jelezni
Nagyfelbonts natv idztket hasznl
Mdia s kpkezels
Stabil, gyors s konzisztens mkds minden platformon
javafx.scene.media API
Kp s hang kezels
> Hang: MP3, AIFF, WAV
> Vide: FLV
Hrom f osztly:
> Media: mdia llomnyt jelkpezi
> MediaPlayer: mdia lejtszsrt felels
> MediaView: mdia megjelentse
(Scene Graph node)
Begyazhat bngsz
WebKit alap bngsz komponens (HTML5, CSS, JavaScript, DOM, and
SVG)
Fbb funkcik:
> HTML tartalom renderelse helyi gprl, vagy hlzati URL alapjn
> History s elre-htra navigci
> jratlts
> Effektek tmogatsa a web komponensen
> HTML tartalom szerkesztse
> JavaScript parancsok futtatsa
> Esemnyek kezelse
WebEngine (alap bngsz elem)
WebView: HTML oldal, Scene Graph Node leszrmazott
CSS tmogats
Megjelents megvltoztatsa a forrskd vltoztatsa
nlkl
Brmelyik Scene Graph Node-on alkalmazhat s akr
futsi idben is hozzrendelhet
W3C CSS 2.1 alap
UI vezrlk
JavaFX API-n keresztl
elrhetk
Scene Graph Node
elemek
JavaFX CSS-el
testreszabhat
megjelents
Layout-ok
UI vezrlk flexibilis s dinamikus elhelyezsnek biztostsa
javafx.scene.layout csomag
Fbb layout modellek:
> BorderPane
> HBox, VBox
> StackPane
> GridPane
> FlowPane
> TilePane
> AnchorPane
2D s 3D transzformcik
Minden Scene Graph Node transzformlhat
javafx.scene.tranform csomag osztlyai
> Translate: x,y,z tengely menti mozgats
> Scale: x,y,z menti tmretezs
> Shear: Elforgats gy, hogy az x s y tengelyek nem
maradnak merlegesek
> Rotate: Elforgats
> Affine: Egyenessg s prhuzamossg megtart lineris
transzformci (tbbivel rdemes hasznlni)
Vizulis effektek
Felhasznli ltvny/lmny nvelse kpi
hatsokkal
Tbb node-on is rvnyesthet, ilyenkor a node-
okbl egy kp kszl s azon alkalmazza a
JavaFX az effektet
Nhny f effekt:
> Drop Shadow: rnyk
> Reflection: tkrzds
> Lightning: fnyforrs
Telepts
Desktop vagy bngsz alkalmazs
Hromfle teleptsi md:
> Standalone: JAR teleptse/indtsa
> Browser: Weboldalba gyazott objektum, JavaScript-
en keresztl el tudja rni az oldalt
> Web Start: Serverrl tltdik le az alkalmazs, majd
a JNLP llomnyra kattintva futtathat az
alkalmazs
A JavaFX jvje
Oracle elktelezett a JavaFX mellett
Partnerek: MobiTV, Westhawk, VNI Media, DigiArea Inc.,
C2Call GmbH, Chronotech, stb.
2.0-bl nhny kimaradt elem:
> CSS animcik
> Standard s Custom dialgusok
> Teljes WebBrowser vezrl
> Szinkronizlt mdia s animcik
2.2-ben megjelent javtsok
Mi nem igaz a JavaFX-re?
A. A UI XML-bl s Java kdbl is szerkeszthet.
B. Csak Windows-on mkdik.
C. Kihasznlja a grafikus gyorst felletet.
D. Java nyelven fejleszthet.
Telepts
JDK + NetBeans
> www.netbeans.org
Vagy IDEA
JavaFX HelloWorld
public class HelloWorld extends Application {
public static void main(String[] args) {
Application.launch(HelloWorld.class, args);
}
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root,80,20);
primaryStage.setScene(scene);
root.getChildren().add(new Label(
"Hello JavaFX 2.0"));
// teljes kperny tmogatsa
// primaryStage.setFullScreen(true);
primaryStage.show();
}
}
JavaFX PopUp
public void start(final Stage primaryStage) {
Button btn = new Button();
btn.setText("Show PopUp");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Popup popup = new Popup();
HBox box = new HBox();
box.getChildren().add(new Label("Hello JavaFX csoport!"));
box.setPrefSize(150, 30);
box.setStyle("-fx-background-color: gray;");
popup.getContent().add(box);
popup.setX(200);
popup.setY(300);
popup.show(primaryStage);
}
});
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 800, 600, Color.BLACK);
primaryStage.setScene(scene);
primaryStage.show();
}
}
Alap struktra
Az Application osztlybl kell leszrmazni
Kt metdust tartalmaz:
> main(String[] args): ez hvdik meg elsknt (Java-hoz
hasonl, argumentumokat kaphat) s hvja meg a launch()
metdust
> start(Stage primaryStage): ezt az abstract fggvnyt kell
felldefinilni, ami argumentumknt megkapja az alkalmazs
alap Stage-jt
Vgl a Stage show() fggvnynek meghvsval
jelenik meg az ablak
Fekete httr
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 800, 600, Color.BLACK);
primaryStage.setScene(scene);
primaryStage.show();
}
Krk elhelyezse 1/2
Group circles = new Group();
circle.setStrokeType(StrokeType.OUTSIDE);
circle.setStroke(Color.web("white", 0.16));
circle.setStrokeWidth(4);
circles.getChildren().add(circle);
root.getChildren().add(circles);
Krk elhelyezse 2/2
Krket tartalmaz csoport ltrehozsa
Krk pldnyostsa egy ciklusban
150 px sugar tltsz krk (5% opacity)
Vilgos krvonal, a kr terletn kvl
(StrokeType.OUTSIDE)
Csoport elhelyezse a Scene Graph-ban
Alaprtelmezetten bal fell jelennek meg a krk
Kpi hats belltsa a krkre
circles.setEffect(new BoxBlur(10, 10, 3));
Elmoss effektus hozzads a krkhz
Csoport szint effekt bellts
Szntmenetes httr 1/2
Rectangle colors = new Rectangle(scene.getWidth(), scene.getHeight(),
Stop[]{
root.getChildren().add(colors);
Szntmenetes httr 2/2
A root.getChildren().add(circles); sor el
helyezzk el, hogy a krk alatt legyen a httr
colors nev tglalap ltrehozsa, ami a jelenettel
megegyez szlessg s magassgi s teljesen
kitlti azt
Lineris szntmenet, bal alulrl (0,0) jobb fellre
(1,1)
Vgl a colors hozzadsa a jelenthez
Aktulis Scene Graph
Kevers belltsa a krk szneihez 1/2
vBox.getChildren().add(textFieldLat);
vBox.getChildren().add(textFieldLng);
vBox.getChildren().add(buttonShowMap);
vBox.getChildren().add(imgView);
root.getChildren().add(vBox);
Trkp alkalmazs 3/3
private void loadHttpFile(String urlAddress, ImageView imgView) {
HttpURLConnection hc = null;
InputStream is = null;
try {
URL url = new URL(urlAddress);
hc = (HttpURLConnection)url.openConnection();
is = hc.getInputStream();
imgView.setImage(new Image(is));
return;
} catch(Exception e1) {
e1.printStackTrace();
}
finally {
try {
if(is != null)
is.close();
if(hc != null)
hc.disconnect();
} catch(Exception e2) {
e2.printStackTrace();
}
}
}
Egy-kt effekt alkalmazsa
buttonShowMap.setEffect(
new Reflection());
buttonShowMap.setStyle(
"-fx-font: 22 arial; -fx-
base: #b6e7c9");
buttonShowMap.setRotate(
270);
UI mdostsa ms szlbl
Platform.runLater(new Runnable() {
@Override public void run() {
imgView.setImage(im);
}
});
2000 gomb 1/2
2000 gomb 2/2
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 880, 680, Color.BLACK);
for (int i = 0; i < 2000; i++) {
Button btn1 = new Button("press" + i);
btn1.setRotate(random(360));
btn1.setEffect(new Reflection());
btn1.setLayoutX(random(800));
btn1.setLayoutY(random(600));
root.getChildren().add(btn1);
}
primaryStage.setScene(scene);
primaryStage.show();
}
62