Scene Builder JavaFX

3 respostas
W

Galera seguinte, ainda não entendi bem, como ter acesso aos componentes criados com o Scene Builder (FXML). Tem como alguém me dar um exemplo bem simples (Tipo só um botão que tenha um evento)? Eu sei que tem que usar a interface Initializable, e marcar com a anotação @FXML nos componentes tendo um id definido com os mesmos nomes. Mas não consegui fazer funcionar.

3 Respostas

S

Primeiro você vai no Scene Builder e seta os ids dos componentes.
Depois vá até o seu controller e marque com @FXML os componentes do seu FXML.
Agora é só utilizar normalmente como uma variável qualquer.

Por exemplo, um botão de cancelar (fechar a janela).

@FXML
    private Button botaoCancelar;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        botaoCancelar.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent t) {
                Stage stage = (Stage) botaoCancelar.getScene().getWindow();
                stage.close();
            }
        });
    }

Não sei se foi essa a sua pergunta.

W

Era isso isso sim. Porém, eu tenho que criar outra classe que implementa Initializable, ou posso implementar já na minha classe que herda de Application?

S

Bom, se você estiver utilizando o Netbeans, há a opção de criar a classe controller automaticamente (a classe que implementa Initializable). Por exemplo, tenho um arquivo FXML que se chama TelaPrincipal.fxml e tenho uma classe controller que se chama TelaPrincipalController.java . Esse classe que herda Application, eu uso para carregar a tela principal. Por exemplo:

public class MainApp extends Application {

    private static Stage primaryStage;

    public static final String TELA_PRINCIPAL = "/br/com/st/monteseutreino/view/TelaPrincipal.fxml";
    public static final String TELA_CADASTRAR_EXERCICIO = "/br/com/st/monteseutreino/view/CadastrarExercicio.fxml";
    public static final String TELA_EDITAR_EXERCICIO = "/br/com/st/monteseutreino/view/EditarExercicio.fxml";
    public static final String TELA_GERAR_PDF = "/br/com/st/monteseutreino/view/GerarPDF.fxml";
    
    @Override
    public void start(Stage stage) throws Exception {

        Parent root = FXMLLoader.load(getClass().getResource(TELA_PRINCIPAL));
        Scene scene = new Scene(root);

        setPrimaryStage(stage);

        stage.setResizable(true);
        stage.setScene(scene);
        stage.setResizable(false);
        stage.sizeToScene();

        stage.show();
    }

    /**
     * The main() method is ignored in correctly deployed JavaFX application.
     * main() serves only as fallback in case the application can not be
     * launched through deployment artifacts, e.g., in IDEs with limited FX
     * support. NetBeans ignores main().
     *
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

    public static void setPrimaryStage(Stage stage) {
        MainApp.primaryStage = stage;
    }

    public static Stage getPrimaryStage() {
        return MainApp.primaryStage;
    }
}
Criado 24 de março de 2014
Ultima resposta 25 de mar. de 2014
Respostas 3
Participantes 2