JavaFX Classe de Controle e Eventos Prof. Vicente Paulo de Camargo
Labels são componentes que permitem auxiliar na compreensão de uma interface gráfica, principalmente para indicar as identificações de elementos em uma interface gráfica Um componente Label geralmente possui um texto de identificação Nas aplicações com internacionalização, os labels devem ser bem identificados (como variáveis) para facilitar a alteração do idioma As caixas de textos (TextField) permitem a entrada de dados pelo usuário Uma caixa de texto permite conteúdos alfanuméricos Para validar o conteúdo de uma caixa de texto é necessário utilizar de recursos específicos da plataforma ou de codificação específica Os botões (Button) permitem efetuar certas ações quando forem clicados A maioria dos componentes JavaFX permitem executar diversos eventos Uma caixa de texto possui, por exemplo, os eventos receber foco, perder foco, receber a digitação de uma tecla e outros Um botão pode receber evento de clicar do botão esquerdo ou direito, por exemplo
Um componente JavaFX possui propriedades como tamanho e altura, por exemplo, e também pode receber eventos realizados pelo usuário como click do mouse, perder o foco e outros Um evento é, portanto, uma ação que o usuário efetua sobre algum componente existente na interface gráfica O JavaFX permite associar uma classe de controle com o arquivo FXML de uma determinada interface gráfica (ou visão) Essa classe de controle permite ao JavaFX tratar os eventos que o usuário efetuará na interface gráfica sobre caixas de texto, botões e outros elementos disponíveis em uma interface gráfica Um evento corresponde a um método no código Java e esse código Java deve, preferencialmente, estar na classe de controle associada ao arquivo FXML da respectiva interface gráfica (ou visão).
Crie o projeto JavaFX com o nome SceneBuilderExemplo. Com o projeto SceneBuilderExemplo aberto no Eclipse, crie os pacotes controle e view em src. Crie a classe ViewControle.java no pacote controle Crie o arquivo ViewFXML.fxml no pacote view 1 Na janela New digite fxml e selecione New FXML Document e selecione Next O arquivo FXML ficará salvo no pacote view Na próxima janela informe ViewFXML em Name e Finish 3 2
Abra o arquivo ViewFXML.fxml pelo Scene Builder A janela do SceneBuilder é apresentada com o arquivo ViewFXML.fxml
Crie agora uma interface gráfica com o container Pane, localizado na aba Containers Insira um controle TextField e três controles Button Esses controles se encontram na aba Controls do SceneBuilder Observe a interface criada na figura a seguir: Controle TextField Controles Button Observe o passo-a-passo para criar essa interface gráfica
Com o projeto SceneBuilderExemplo aberto no Eclipse, Abra o arquivo ViewFXML.fxml pelo Scene Builder Acesse a aba Controller, abaixo da aba Hierarchy, no lado esquerdo do Scene Builder E informe a expressão controle.viewcontrole (pacote e nome da classe de controle) Salve as mudanças no Scene Builder Isso faz com que a aplicação relacione o arquivo fxml com a classe de controle correspondente
Código sem a classe de controle Código com a classe de controle Note os erros no fxml. Eles ocorrem porque a classe controle não possui a referência dos elementos e dos seus respectivos eventos Referência da classe de controle
Para eliminar os erros no fxml: Com o Scene Builder ainda aberto com o arquivo ViewFXML.fxml Acesse a opção O View / Show Sample Controller Skeleton 1 Será apresentada a janela Sample Skeleton For ViewFXML.fxml Controller Class 2 Clique no botão Copy dessa Janela para copiar o seu conteúdo para a memória Acesse o código da classe ViewControle.java, apagando todo o seu código e copiando o conteúdo da memória para essa classe Salve a classe ViewControle.java 1 2
Ajuste os erros clicando no x de um dos erros e importe a biblioteca informada ActionEvent(javafx.event) O respectivo import pode também ser efetuado com a combinação ctrl+shift+o
Agora, tanto a classe de controle quanto o arquivo fxml, não possuem erros Note os métodos correspondentes aos eventos de cada botão. Assim, por exemplo, se o botão btnincluir receber um clique do mouse, o evento btnincluironaction será chamado
Em seguida, ajuste o código do Método btnincluironaction Observe as alterações
A classe de controle ViewControle utiliza a classe Alert para apresentar uma caixa de dialogo de mensagens Trecho para apresentação de mensagens com a classe Alert
Observe a caixa de dialogo Alert em tempo de execução. title headertext Texto da mensagem
Para que se possa abrir a janela (ou visão) ViewFXML.fxml será necessário alterar o código da classe principal da aplicação, a qual deverá referenciar o arquivo ViewFXML.fxml para abrir a respectiva janela Novo código Código atual
Aplicação em tempo de execução Após clique do mouse sobre o botão Incluir
Outras formas de expressar o evento do botão btnincluir Segunda forma: Dentro do método initialize com expressão lambda: btnincluir.setonaction((event) -> { Alert alert; alert = new Alert(AlertType.INFORMATION,"Você Clicou no Botão Incluir",ButtonType.OK); alert.settitle("mensagem"); alert.setheadertext("informação"); alert.show(); }); sem expressão lambda: btnincluir.setonaction(new EventHandler<ActionEvent>(){ @Override public void handle(actionevent event){ //código } });
Outras formas de expressar o evento do botão btnincluir Terceira forma: Fora do método initialize: //Parte I private void handlebuttonaction(actionevent event) { // o botão foi clicado, faz algo } Dentro do método initialize //Parte II btnincluir.setonaction(this::handlebuttonaction);
Evento de foco com TextField Devem ser codificados dentro de initialize através do método focusedproperty() nomefuncionario.focusedproperty().addlistener(new javafx.beans.value.changelistener<boolean>() { @Override public void changed(observablevalue<? extends Boolean> arg0, Boolean velhovalor, Boolean novovalor) { if (!novovalor) { Alert alert; alert = new Alert(AlertType.INFORMATION,"Desfocado",ButtonType.OK); alert.settitle("mensagem"); alert.setheadertext("informação"); alert.show(); } else { System.out.println( FOCOU ); } } });
F I M