JavaFX Classe de Controle e Eventos Prof.Vicente Paulo de Camargo Classe de Controle e Eventos 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 Classe de Controle e Eventos 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). Classe de Controle e Eventos Com o projeto SceneBuilderExemplo aberto no Eclipse, crie o pacote controle. Em seguida, crie a classe ViewControle.java no pacote controle 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 Classe de Controle e Eventos Código sem a classe de controle Código com a classe de controle Referência da classe de controle Classe de Controle e Eventos 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 Sekeleton 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 Classe de Controle e Eventos Criando Eventos Agora a classe de controle ViewControle.java possui as referências dos controles (agora objetos) criados pelo Scene Builder Vamos criar um evento para o botão btnIncluir Para isso, volte ao Scene Builder e selecione o botão btnIncluir Acesse a aba Code, do lado direito do Scene Builder Selecione a caixa de texto On Action e informe btnIncluirOnAction Esse será o nome do método quando esse botão for clicado Aba Code On Action Selecionado Classe de Controle e Eventos Criando Eventos Salve o as mudanças no Scene Builder Acesse novamente a opção View e copie apenas o trecho do novo código gerado e cole-o no final da classe ViewControle.java Ajuste o arquivo FXML no Eclipse e cole Copie esse trecho Classe de Controle e Eventos Ajuste o erro na classe com ctrl+shift+o para importar a classe necessária e selecione a opção indicada a seguir I 2 Em seguida, ajuste o código do Método btnIncluirOnAction 3 Observe as alterações Classe de Controle e Eventos 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 Classe de Controle e Eventos A classe de controle ViewControle utiliza a classe Alert para apresentar uma caixa de dialogo de mensagens title headerText Texto da mensagem Classe de Controle e Eventos 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 Classe de Controle e Eventos Aplicação em tempo de execução Após clique do mouse sobre o botão Incluir Classe de Controle e Eventos 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 } }); Classe de Controle e Eventos 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); Classe de Controle e Eventos 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”); } } }); Exercício Desenvolva uma aplicação orientada a objetos com o uso de MVC e JavaFX, a qual deve permitir o cadastro pessoas, com nome e cpf (cuja chave primária é inteira e incremental), em um banco de dados. Não será permitido o cadastro de pessoas com o mesmo cpf e os nomes devem ser atualizados no banco de dados em caixa alta. A aplicação deve: a)Apresentar uma tela de manutenção de dados de pessoas para incluir, alterar e excluir pessoas b)Para alterar ou excluir deve-se informar o código da pessoa para que o sistema possa pesquisar os dados e preencher a tela de cadastro para que o usuário possa efetuar a respectiva atualização c)Deve-se utilizar botões para efetuar as respectivas ações de incluir, alterar ou excluir d)Utilizar uma classe para apresentar mensagens específicas de erro ou de operação concluída FIM