Baseado nos cursos da Softblue
O JavaFX
JavaFX é uma tecnologia composta por um conjunto de APIs
Criação de rich client applications
– Ex: formulários, gráficos, multimídia, gráficos 2D e 3D, etc.
- JavaFX é totalmente feito em Java
– Integração com as APIs do Java já conhecidas
– Suporte multiplataforma
Arquitetura do JavaFX
Estrutura de cena
Apenas uma cena pode estar visível por vez
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MainApp extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void init() {
//...
}
@Override
public void start(Stage primaryStage) {
Button btn = new Button("Aperte aqui");
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 400, 300);
primaryStage.setTitle("JavaFX App");
primaryStage.setScene(scene);
primaryStage.show();
}
}
Layout panes
Os nós devem ser organizados na tela na montagem da interface gráfica
A melhor forma de organizá-los é através dos painéis de layout
Tipos
– HBox
– VBox
– BorderPane
– AnchorPane
– StackPane
– GridPane
– FlowPane
– TilePane
HBox
- Organiza os nós horizontalmente
1
2
HBox box = new HBox();
box.getChildren().add(node);
VBox
- Organiza os nós verticalmente
1
2
VBox box = new VBox();
box.getChildren().add(node);
BorderPane
- 5 regiões: top, bottom, left, right, center
1
2
3
4
5
6
BorderPane pane = new BorderPane();
pane.setTop(node1);
pane.setBottom(node2);
pane.setLeft(node3);
pane.setRight(node4);
pane.setCenter(node5);
AnchorPane
- Permite ancorar os nós nos cantos
1
2
3
4
5
6
AnchorPane pane = new AnchorPane();
pane.getChildren().addAll(node1, node2);
AnchorPane.setRightAnchor(node1, 5.0);
AnchorPane.setTopAnchor(node1, 5.0);
AnchorPane.setLeftAnchor(node2, 5.0);
AnchorPane.setBottomAnchor(node2, 5.0);
StackPane
- Empilha os nós
1
2
3
4
StackPane pane = new StackPane();
pane.setAlignment(Pos.CENTER_RIGHT);
StackPane.setMargin(btn3, new Insets(20, 20, 0, 0));
pane.getChildren().addAll(node1, node2, node3);
GridPane
- Organiza em linhas e colunas
1
2
3
4
5
GridPane pane = new GridPane();
pane.add(node1, 0, 0);
pane.add(node2, 0, 1);
pane.add(node3, 1, 0);
pane.add(node4, 1, 1);
FlowPane
- Organiza em linhas ou colunas e faz a quebra se não houver espaço
1
2
3
4
FlowPane pane = new FlowPane();
pane.setOrientation(Orientation.HORIZONTAL);
pane.getChildren().addAll(
node1, node2, node3, node4, node5, node6);
TilePane
- Organiza os nós como o FlowPane, mas em células com o mesmo tamanho
1
2
3
TilePane pane = new TilePane();
pane.setOrientation(Orientation.VERTICAL);
pane.getChildren().addAll(node1, node2, node3, node4, node5, node6);
Controles
Eventos
- Eventos são ações disparadas em resposta a alguma ação do usuário
– Tecla pressionada, mouse clicado, janela redimensionada, etc.
- Alguns exemplos
– KeyEvent
– MouseEvent
– ActionEvent
– WindowEvent
Event Handlers
Quando um evento é disparado, determinado código pode ser executado em resposta à ocorrência do evento
Este código é um event handler
1
2
3
4
5
6
7
Button btn = new Button("OK");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
//...
}
});
EventHandler é uma interface funcional
É possível utilizar expressões lambda
1
2
Button btn = new Button("OK");
btn.setOnAction(event -> doSomething());