Interface Grafica Javafx
Interface Grafica Javafx
Interface Grafica Javafx
http://educandoweb.com.br
Prof. Dr. Nelio Alves
Objetivo geral:
JavaFX é o sucessor do Swing e Java AWT para interfaces gráficas com Java
Uma tela JavaFX pode ser montada via código Java, ou via código FXML
Preparação do Eclipse
Checklist:
Baixar o JavaFX SDK: https://gluonhq.com/products/javafx/
o Salvar em uma pasta "fácil", de preferência com nome sem espaços
Exemplo: C:\java-libs
Checklist:
Criação do projeto:
o File -> New -> Other -> JavaFX Project
o Dê um nome ao projeto e clique Next
o Na aba Libraries, selecione Modulepath, clique Add Library, e selecione JavaFX
o Clique Finish
o Module Info: Don't Create
Configuração do build:
o Botão direito no projeto -> Run As -> Run Configurations -> Arguments -> VM Arguments
o Copiar o conteúdo abaixo, adaptando para sua pasta:
package application;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
Testando o FXML
Projeto: https://github.com/acenelio/javafx1
Checklist:
Criar um pacote gui
Criar um FXML no projeto: Botão direito no pacote gui -> New -> Other -> New FXML Document
o Nome: View
Abra o FXML no SceneBuilder: Botão direito -> Open in SceneBuilder
Observe as guias: Library, Document e Inspector
o Inspector -> Layout: defina largura e altura, depois salve
o Library -> Control: acrescente alguns controles (ex: TextField, Button)
De volta ao Eclipse, na classe Main, refazer o método start:
@Override
public void start(Stage stage) {
try {
Parent parent = FXMLLoader.load(getClass().getResource("/gui/View.fxml"));
Scene scene = new Scene(parent);
stage.setScene(scene);
stage.show();
}
catch (IOException e) {
e.printStackTrace();
}
}
Tratando eventos com JavaFX
Projeto: https://github.com/acenelio/javafx2
Checklist:
Crie uma classe controladora da sua view (ex: ViewController.java)
No controlador:
o Criar um atributo correspondente ao controle desejado e anotá-lo com @FXML
o Criar um método para tratar o evento desejado do controle e anotá-lo com @FXML
DICA: quando mudar algo no SceneBuilder, use Project -> Clean no Eclipse para forçar a atualização do projeto
Mostrando Alert
Projeto: https://github.com/acenelio/javafx3
package gui.util;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
public static void showAlert(String title, String header, String content, AlertType type) {
Alert alert = new Alert(type);
alert.setTitle(title);
alert.setHeaderText(header);
alert.setContentText(content);
alert.show();
}
}
Projeto: https://github.com/acenelio/javafx4
Checklist:
Desenhar tela no SceneBuilder (usar um label para resultado)
o Propriedade "promptText"
Criar um controller e implementar código para mostrar a soma
o Tratar exceção NumberFormatException
De volta ao Scene Builder, fazer as associações de id e evento
DICA: quando mudar algo no SceneBuilder, use Project -> Clean no Eclipse para forçar a atualização do projeto
Limitações para TextField e Initializable
Projeto: https://github.com/acenelio/javafx5
Referências: https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/Initializable.html
Checklist:
Criar classe utilitária Constraints
Fazer o controlador implementar a interface Initializable
package gui.util;
import javafx.scene.control.TextField;
ComboBox
Projeto: https://github.com/acenelio/javafx6
Checklist:
Propriedade Prompt Text
Usar tipo genérico, por exemplo: ComboBox<Person>
ObservableList<Person>, ObservableSet<Person>, ObservableMap<Person>
o Para criar um ObservableList: FXCollections.observableList(list)
ComboBox.setItems(observableList)
Nota: o combo box, por padrão, mostra o toString do objeto
Para obter o elemento selecionado: comboBox.getSelectionModel().getSelectedItem()
Para acessar a coleção: comboBox.getItems()
Para definir o que mostrar na comboBox:
comboBox.setCellFactory(factory);
comboBox.setButtonCell(factory.call(null));
Checklist:
AnchorPane
GridPane
SplitPane
VBox & HBox
BorderPane
ScrollPane