0% au considerat acest document util (0 voturi)
127 vizualizări14 pagini

Laborator 1FX

Documentul prezintă JavaFX, un framework pentru dezvoltarea interfețelor grafice în Java. Se explică arhitectura JavaFX, crearea unui proiect și ciclul de viață al aplicației. Sunt prezentate clase pentru desenarea unor forme geometrice precum linie și dreptunghi.

Încărcat de

Bogdan Manciu
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
127 vizualizări14 pagini

Laborator 1FX

Documentul prezintă JavaFX, un framework pentru dezvoltarea interfețelor grafice în Java. Se explică arhitectura JavaFX, crearea unui proiect și ciclul de viață al aplicației. Sunt prezentate clase pentru desenarea unor forme geometrice precum linie și dreptunghi.

Încărcat de

Bogdan Manciu
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 14

JAVA FX

JavaFX este un nou “framework” pentru dezvoltarea interfețelor grafice (GUI) .Acesta
este un exemplu excelent de aplicarea a principiului de programare orientata pe obiecte. Swing
si AWT sunt înlocuite de către platforma JavaFX pentru dezvoltarea RIA(rich internet
application).
JavaFX este un set de pachete grafice și multimedia care permite dezvoltatorilor
proiectarea, testarea, depanarea precum și implementarea aplicațiilor bogate în conținut care
ruleaza constant pe diverse platforme.

Diagrama de arhitectură a JavaFx

Interfața grafică în JavaFx este construită ca scena grafică. O scena grafică este o colecție
de elemente vizuale, numite noduri.
Crearea unui proiect JavaFx

Se va descărca ultima versiunea de NetBeans.(Click pe NetBeans)


File -> New Project...

Se selectează JavaFx -> JavaFx application -> Next

Se introduce numele proiectului, calea, JavaFx Platform: JDK 1.8, numele pachetului.
Aplicația JavaFx poate fi compilată și rulată din interiorul programului NetBeans.
Exista 3 posibilități de rularea :
 Rulare ca aplicație de sine stătătoare pentru desktop
 Rulare ca WebStart
 Rulare în browser

În NetBeans rularea de bază este ca aplicație de sine stătătoare desktop. Se poate schimba
modul prin care aplicația rulează din proprietății-le proiectului sub categoria Run. Pentru a
accesa fereastra Properties Project, selectați proiectul, click dreapta, și selectați Properties. Se
selectează Run din lista de categorii. Se introduc proprietățiile dorite pentru proiectul dvs.

Ciclul de viață al aplicației JavaFx

La momentul execuției JavaFx creează câteva fire de execuție (threads). Pe parcursul rulării
aplicației, firele de execuție sunt folosite pentru a efectua diferite sarcini (taksuri). Printre altele
JavaFx creează doua fire de execuție importante:
 JavaFx-Launcher
 JavaFx Application Thread
Metoda launch() a clasei Application crează aceste fire de execuție. Pe parcursul timpului de
viață al aplicației JavaFx, JavaFx apelează urmatoarele metode specifice clasei Application în
ordinea:
 no-args constructor
 metoda init()
 metoda start()
 metoda stop()
Metoda init() este neimplementată, deci se poate suprascrie în program.
Firul de execuție JavaFx Application apelează metoda start() (Stage stage), metodă specifică
clasei Application. Este o metodă abstractă deci poate fi suprascrisa în program.
În acest moment, metoda launc() așteaptă aplicația JavaFx sa se sfârșească. Când aplicația se
termină, firul de execuție JavaFx Application apelează metoda stop(). Implementarea de bază a
metodei stop() este “goală” în clasa Application, aceasta trebuie suprascrisă în program.

Urmatorul program prezintă ciclul de viață al aplicației JavaFx si pe UI un stagiu gol. În


consolă este afișat ciclul de viață pe parcursul rulării.

package ace.ucv;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class FXLifeCycleApp extends Application {

public FXLifeCycleApp() {
String name = Thread.currentThread().getName();
System.out.println("FXLifeCycleApp() constructor: " + name);
}

public static void main(String[] args) {


Application.launch(args);
}

@Override
public void init() {
String name = Thread.currentThread().getName();
System.out.println("init() method: " + name);
}

@Override
public void start(Stage stage) {
String name = Thread.currentThread().getName();
System.out.println("start() method: " + name);
Scene scene = new Scene(new Group(), 200, 200);
stage.setScene(scene);
stage.setTitle("JavaFX Application Life Cycle");
stage.show();
}
@Override
public void stop() {
String name = Thread.currentThread().getName();
System.out.println("stop() method: " + name);
}
}

Rezultat:

FXLifeCycleApp() constructor: JavaFX Application Thread


init() method: JavaFX-Launcher
start() method: JavaFX Application Thread

Ce este un Property ?

O clasa java conține doua tipuri de membrii: câmpuri si metode.


 Câmpurile reprezintă starea obiectelor și ele sunt declarate private.
 Metodele publice, știu-te și ca accesorii sau “getters” și “setters”, sunt folosite pentru a
citii și modifica valoarea campurilor declarate ca private.
Pe scurt, o clasa Java care are metode de “getters” și “setters” este cunoscută ca și Java
“bean”, accesoriile definesc proprietățiile.

Structura de baza a unui program JavaFX:


Clasa java.fx.application.Application definește framework-ul pentru a scrie programe
JavaFx.

Prima dumneavoastră aplicație JavaFx. Aceasta trebuie să afișeze textul “Hello World” în
interiorul unui buton aflat în mijlocul ferestrei, la apăsarea acestuia va fi afisat la consola Ace.
O aplicație JavaFx este o clasă care trebuie să moștenească application care se afla în
pachetul javafx.application. Veți numii clasa AutomaticaFxApp și va fi stocată în pachetul
ace.ucv.

Mai jos este prezentat codul:

package ace.ucv;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class AutomaticaFxApp extends Application implements EventHandler<ActionEvent>{

@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello word!");
Button btn = new Button(); //crearea butonului
btn.setText("Say 'Hello World'"); //setarea textului din centru buttonului
btn.setOnAction(this); //setarea functionalitati la apasarea acestui buton

StackPane layout = new StackPane();


layout.getChildren().add(btn);//adaugarea butonului in scena

Scene scene = new Scene(layout, 300, 250); //crarea scenei


primaryStage.setScene(scene); //setarea scenei
primaryStage.show(); //afisara scenei
}
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World"); //afisarea Hello World in consola
} //la apasarea butonului

public static void main(String[] args) {


launch(args);
}
}
În urmatorul exemplu se creează un buton, i se seteaza proprietățiile dupa care este
adaugat în panou. Panoul este rotit cu 45 grade.

Cod sursa:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.scene.layout.StackPane;

public class NodeStyleRotateDemo extends Application {

@Override
public void start(Stage primaryStage) {

StackPane pane = new StackPane();


Button btOK = new Button("OK");
btOK.setStyle("-fx-border-color: blue;");
pane.getChildren().add(btOK);

pane.setRotate(45);
pane.setStyle( "-fx-border-color: red; -fx-background-color: lightgray;");
Scene scene = new Scene(pane, 200, 250);
primaryStage.setTitle("NodeStyleRotateDemo");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}
Prezentarea unor clase pentru desenarea unor forme geometrice:
-linie javafx.scene.shape.Line;
-dreptunghi javafx.scene.shape.Rectangle;

Linia
O linie unește două puncte definite de patru parametrii startX, startY, endX și endY. Mai
jos este prezentată diagrama pentru clasa Line.

Cod sursa:

package javafxapplication2;

import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Slider;
import javafx.scene.paint.Color;
import javafx.scene.shape.Line;
import javafx.scene.shape.StrokeLineCap;
import javafx.scene.text.Text;
import javafx.stage.Stage;
/**
* Drawing Lines
* Listing 2-1 DrawingLines.java
* @author carldea
*/
public class DrawingLines extends Application {

@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Chapter 2 Drawing Lines");
Group root = new Group();
Scene scene = new Scene(root, 300, 150, Color.GRAY);

// Creare linie
Line redLine = new Line(10, 10, 200, 10);

// setarea proprietățiilor liniei


redLine.setStroke(Color.RED);
redLine.setStrokeWidth(10);
redLine.setStrokeLineCap(StrokeLineCap.BUTT);

// crearea unui model punctat


redLine.getStrokeDashArray().addAll(10d, 5d, 15d, 5d, 20d);
redLine.setStrokeDashOffset(0);
root.getChildren().add(redLine);

// creare linie
Line whiteLine = new Line(10, 30, 200, 30);

//setarea proprietăți
whiteLine.setStroke(Color.WHITE);
whiteLine.setStrokeWidth(10);
whiteLine.setStrokeLineCap(StrokeLineCap.ROUND);
root.getChildren().add(whiteLine);

// creare linie
Line blueLine = new Line(10, 50, 200, 50);
blueLine.setStroke(Color.BLUE);
blueLine.setStrokeWidth(10);
root.getChildren().add(blueLine);

// slider pentru schimbarea valoriilor


Slider slider = new Slider(0, 100, 0);
slider.setLayoutX(10);
slider.setLayoutY(95);

// legarea proprietatiilor liniei punctate


redLine.strokeDashOffsetProperty()
.bind(slider.valueProperty());
root.getChildren()
.add(slider);

//creare text
Text offsetText = new Text("Stroke Dash Offset: 0.0");
offsetText.setX(10);
offsetText.setY(80);
offsetText.setStroke(Color.WHITE);

// afișarea
slider.valueProperty()
.addListener((ov, curVal, newVal) ->
offsetText.setText("Stroke Dash Offset: " + slider.getValue()));
root.getChildren().add(offsetText);
primaryStage.setScene(scene);
primaryStage.show();

public static void main(String[] args) {


launch(args);
}

}
Schimbarea fondului pentru text

JavaFx permite schimbarea stilului pentru font și a mărimi textului. Mai jos este
prezentată o aplicație JavaFx care afișează patru texte “JavaFX8 : Exemplu”, fiecare având
fonturi diferite iar unele dintre ele au adăugate efecte cum ar fi umbra pentru text
(DropShadow) și reflexie a textului (TextReflection).

Cod sursă:

package javafxapplication2;

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.DropShadow;
import javafx.scene.effect.Reflection;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class SchimbareFont extends Application{

@Override
public void start(Stage primaryStage) {

primaryStage.setTitle("Schimbarea fontului");
System.out.println("Font: ");
Font.getFamilies().stream()
.forEach( i -> System.out.println(i));
System.out.println("Nume font: ");
Font.getFontNames().stream()
.forEach( i -> System.out.println(i));

Group root = new Group();


Scene scene = new Scene(root, 580, 250, Color.WHITE);

// Setare font "Serif" cu umbre


Text text2 = new Text(50, 50, "JavaFX8 : Exemplu");
Font serif = Font.font("Serif", 30);
text2.setFont(serif);
text2.setFill(Color.RED);
DropShadow dropShadow = new DropShadow();
dropShadow.setOffsetX(2.0f);
dropShadow.setOffsetY(2.0f);
dropShadow.setColor(Color.rgb(50, 50, 50, .588));
text2.setEffect(dropShadow);
root.getChildren().add(text2);

// Setare font "SanSerif"


Text text3 = new Text(50, 100, "JavaFX8 : Exemplu");
Font sanSerif = Font.font("SanSerif", 30);
text3.setFont(sanSerif);
text3.setFill(Color.BLUE);
root.getChildren().add(text3);

// Setare font "Dialog"


Text text4 = new Text(50, 150, "JavaFX8 : Exemplu");
Font dialogFont = Font.font("Dialog", 30);
text4.setFont(dialogFont);
text4.setFill(Color.rgb(0, 255, 0));
root.getChildren().add(text4);

// Setare font "Monospaced" cu reflexie


Text text5 = new Text(50, 200, "JavaFX8 : Exemplu");
Font monoFont = Font.font("Monospaced", 30);
text5.setFont(monoFont);
text5.setFill(Color.BLACK);
root.getChildren().add(text5);

// Setare reflexie
Reflection refl = new Reflection();
refl.setFraction(0.8f);
refl.setTopOffset(5);
text5.setEffect(refl);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Chestiuni de studiat

1.Modificați primul program pentru a afișa “ACE Craiova” în locul textului “Hello JavaFX”.

2.Modificați programul de mai sus astfel încat să mai adaugați un buton cu textul “ACE”, la
apasarea acestuia pe consolă va aparea “Hello ACE Craiova”.
3.Realizați un program cu 2 butoane si 2 texte, la apasarea butonului se va schimba atât textul
cât și stilul fiecarui text.

@Override
public void start(Stage primaryStage) {
Button btn = new Button(); //crarea butonului
btn.setText("Say 'Hello World'"); //setarea textului din centru butonului

btn.setOnAction(new EventHandler<ActionEvent>() { //setarea funcționalități


// la apasarea acestuia

@Override
public void handle(ActionEvent event) {
btn.setText("Java");
Font dialogFont = Font.font("Dialog", 30);
btn.setFont(dialogFont);

System.out.println("Hello World"); //afișarea Hello World în consolă


} //la apasarea butonului

S-ar putea să vă placă și