Java EE

Transkrypt

Java EE
„Java EE – produkcja
oprogramowania”
INU – INTERFEJS UŻYTKOWNIKA
BUDOWA PROGRAMU W JAVAFX
Warszawa, 2016Z
Budowa programu w JavaFX
1/3
Wszystkie aplikacje w JavaFX dziedziczą z klasy Application.
Klasa programu woła metodę launch, które najpierw woła metodę init
i następnie metodę start. Kiedy aplikacja kończy działanie, wołana jest
metoda stop. Metoda start jest abstrakcyjna i musi być nadpisana.
public class Main extends Application {
public static void main(String[] args) {
System.out.println("launch");
launch(args); }
@Override
public void init() { // Java Network Launching Protocol
Parameters params = getParameters();
System.out.println("init"); }
launch
=
@Override
public void stop() { System.out.println("stop"); }
}
init
start
stop
2
@Override
public void start(Stage primaryStage) {
System.out.println("start"); Platform.exit(); }
Budowa programu w JavaFX
1/3
Wszystkie aplikacje w JavaFX dziedziczą z klasy Application.
Klasa programu woła metodę launch, które najpierw woła metodę init
i następnie metodę start. Kiedy aplikacja kończy działanie, wołana jest
metoda stop. Metoda start jest abstrakcyjna i musi być nadpisana.
public class Main extends Application {
public static void main(String[] args) {
System.out.println("launch");
launch(args); }
usr/local/java/default
@Override
public void init() { // Java Network Launching Protocol
Parameters params = getParameters();
System.out.println("init"); }
launch
=
@Override
public void stop() { System.out.println("stop"); }
}
init
start
stop
3
@Override
public void start(Stage primaryStage) {
System.out.println("start"); Platform.exit(); }
Budowa programu w JavaFX
2/3
@Override
public void start(Stage primaryStage) {
System.out.println("start");
primaryStage.setTitle("JavaFx");
primaryStage.centerOnScreen();
primaryStage.alwaysOnTopProperty();
primaryStage.setWidth(300);
primaryStage.setHeight(100);
primaryStage.show();
}
4
Klasa Stage reprezentuje okno aplikacji, kontener (na najwyższym poziomie)
zawierający wszystkie obiekty interfejsu użytkownika. W chwili uruchamiania
aplikacji, tworzony jest obiekt klasy Stage i przekazywany, jako parametr
wywołania do metody start. Klasa Stage zawiera podstawowe własności
okna aplikacji: tytuł, ikonę, dekoracje, skalowalność, widoczność. Główne okno
aplikacji uzupełniane jest kontrolkami interfejsu użytkownika i wyświetlane za
pomocą metody show.
W czasie działania aplikacja może tworzyć inne obiekty klasy Stage.
Budowa programu w JavaFX
3/3
Obiekt klasy Scene zawiera kontent okna (napisy, obrazy, kontrolki)
zorganizowane w formie struktury drzewiastej tzw. grafie sceny.
Węzłami grafu sceny są obiekty typu Group i Node. Węzły typu Group mogą
zawierać węzły potomne. Węzły typu Node są liśćmi grafu sceny.
Konstruktor klasy Scene wymaga podania referencji do korzenia grafu sceny.
Referencja do obiektu typu Scene przekazywana jest do obiektu typu Stage.
Obiekt klasy Layout zarządza rozkładem napisów, obrazów, kontrolek okna.
5
Obiekt klasy Control reprezentuje kontrolki np. przyciski, etykiety, listy.
Przykład: okno aplikacji
import
import
import
import
import
javafx.application.*;
javafx.stage.*;
javafx.scene.*;
javafx.scene.layout.*;
javafx.scene.control.*;
public class Click extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("JavaFX");
primaryStage.show();
}
6
}
Przykład: przycisk i układ sceny
Button btnOK;
@Override
public void start(Stage primaryStage) {
//przycisk
btnOK = new Button();
btnOK.setText("Kliknij!");
btnOK.setOnAction( e->btnOK_Click() );
//kontener na kontrolki, zarządza układem sceny
BorderPane borderPane = new BorderPane();
borderPane.setCenter(btnOK);
Scene scene = new Scene(borderPane, 300, 200);
}
7
primaryStage.setScene(scene);
primaryStage.setTitle("JavaFX");
primaryStage.centerOnScreen();
primaryStage.show();
Przykład: procedura obsługi zdarzenia
public void btnOK_Click() {
if (btnOK.getText() == "Kliknij!")
btnOK.setText("Brawo!");
else
btnOK.setText("Kliknij!");
8
}
Ćwiczenie
Bazując na poprzednim programie oraz wiedząc, że obiekt kontrolki etykiety
jest konstruowany poleceniem: Label lblCounter = new Label("Licznik");
dodaj wyświetlanie wartości zmiennej typu całkowitoliczbowego zliczającej
kliknięcia przycisku. Dodaj drugi przycisk zmniejszający wartość licznika.
Wskazówki projektowe:
a) zadeklaruj zmienną licznika int intCounter = 0;
b) użyj zarządcy układu FlowPane np.
9
FlowPane flowPane = new FlowPane(Orientation.HORIZONTAL,
10, 10, btnAdd, btnSub, lblCounter);
Rozwiązanie
import
import
import
import
import
import
import
import
import
1/2
javafx.application.Application;
javafx.geometry.Insets;
javafx.geometry.Orientation;
javafx.geometry.Pos;
javafx.scene.Scene;
javafx.scene.control.Button;
javafx.scene.control.Label;
javafx.scene.layout.FlowPane;
javafx.stage.Stage;
Button btnAdd = new Button("Add");
Button btnSub = new Button("Sub");
Label lblCounter = new Label("0");
int intCounter = 0;
10
public class Main extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
btnAdd.setOnAction(e -> btnAdd_Click());
btnSub.setOnAction(e -> btnSub_Click());
FlowPane flowPane = new FlowPane(Orientation.HORIZONTAL,
10, 10, btnAdd, btnSub, lblCounter);
flowPane.setPadding(new Insets(20, 20, 20, 20));
flowPane.setAlignment(Pos.CENTER);
Scene scene = new Scene(flowPane);
primaryStage.setScene(scene);
primaryStage.setTitle("Counter");
primaryStage.centerOnScreen();
primaryStage.show();
}
public void btnAdd_Click() {
lblCounter.setText(Integer.toString(++intCounter)); }
public void btnSub_Click() {
lblCounter.setText("" + --intCounter); }
}
2/2
11
Rozwiązanie
@Override
public void start(Stage primaryStage) {
btnAdd.setOnAction(e -> btnAdd_Click());
btnSub.setOnAction(e -> btnSub_Click());
FlowPane flowPane = new FlowPane(Orientation.HORIZONTAL,
10, 10, btnAdd, btnSub, lblCounter);
flowPane.setPadding(new Insets(20, 20, 20, 20));
flowPane.setAlignment(Pos.CENTER);
Scene scene = new Scene(flowPane);
primaryStage.setScene(scene);
primaryStage.setTitle("Counter");
primaryStage.centerOnScreen();
primaryStage.show();
}
public void btnAdd_Click() {
lblCounter.setText(Integer.toString(++intCounter)); }
public void btnSub_Click() {
lblCounter.setText("" + --intCounter); }
}
2/2
12
Rozwiązanie

Podobne dokumenty