29 de nov. de 2015

Buscando nós filhos de um Node usando seletores CSS

Nessa postagem vamos fala sobre como retornar os filhos de um classe Node.

Como já falamos aqui, tudo que está em uma aplicação JavaFX é um Node (nó): botões, labels, tabelas, organizadores de leiaute e por aí vai. Alguns desses nodes têm filhos. É o caso do Group, VBox, HBox e outros organizadores de leiaute.

Uma dúvida comum, inclusive perguntada nessa postagem do JavaFree, é sobre como podemos buscar os elementos filhos sem sair fazendo for  e ir lendo elemento por elemento, testar seus atributos e assim achar o que procura. Há outras formas! E a melhor forma é usando o método lookup e lookupAllVamos falar sobre eles hoje!

Seletores CSS


Para usar os métodos acima, devemos usar seletores CSS através de uma String. Para entender melhor, vejam esse artigo do W3 Schools e a ferramenta que eles indicam para testar os seletores. 
Basicamente os selectores são formas de buscar alguma coisa usando uma linguagem simples de representação dos elementos. Por exemplo, se quisermos buscar algum nó pelo seu ID, usamos #ID, onde ID é o ID que se pretende buscar. Há também possibilidades de buscar pela classe do elemento, por valores de seus atributos e por aí vai. Sugiro a leitura do artigo da W3 Schools para melhor entender ou buscar on google alguma fonte em português (o motivo de "linkar" W3 Schools é a confiabilidade e estabilidade do recurso).
O fato é que o seletor CSS muitas vezes retorna vários resultados, pois podemos usar coringas (símbolos especiais que representam um ou mais elementos, como o "*", que representa tudo) ou há vários Nodes que batem com aquela busca. 

lookup e lookupAll


Esse são os dois métodos da classe node que podemos usar para buscar seus filhinhos. A principal diferença entre ele é que o lookup retorna sempre um resultado que corresponde aquela busca e o lookupAll retorna todos os elementos que correspondem a busca em um java.util.Set(uma collection do Java que não permite que os elementos se repitam, sendo sempre únicos). Se nenhum nó filho corresponde à busca usando lookup, o retorno é nulo, já com o lookupAll, o retorno é um Set vazio.

Muito papo né? Vamos fazer um código de exemplo!


Exemplo usando lookupAll


Agora vamos para o nosso código que é uma "aplicaçãozinha" que permite fazer a busca de Labels que estão em uma VBox. Se um ou mais labels correspondem a busca, eles ficam grande, se nenhum corresponder a busca, a gente informa usando um dialog. Vejam uma imagem da nossa APP:




Agora vejam o código no github e em seguida uma explicação. Notem o uso de Stream, assim sugerimos fortemente que leiam a série de artigos sobre Java 8 de um colega aí ;)

Por fim, eu gravei  um vídeo rapidão.




Conclusão


Mostramos o uso dos métodos lookup e lookupAll da classe node. É muito fácil fazer busca de elementos no JavaFX :-) 

25 de nov. de 2015

Rapidinha: Cliente para o jBPM usando JavaFX

Recentemente eu escrevi um artigo para o Master the Boss para mostrar o uso  API remota do jBPM/BPM Suite. Para testar o que escrevi lá, eu também criei uma aplicação simples em JavaFX para lembrar os tempos antigos, onde eu criava aplicações em JavaFX diariamente :-)

A aplicação que eu criei foi realmente simples, seguem algumas imagens:



Essa aplicação simples permite um usuário seguir os passos de um process comercial usando a API remota, que são: iniciar um processo, gerenciar tarefas humanas, ler variáveis de um processo e o histórico de execução do processo. Segue o diagrama do process que eu estou mencionando:



Abaixo você pode ver um vídeo da aplicação acessando o JBoss jBPM:



Isso foi criado em menos de uma hora e você pode ver o código completo no github.


17 de nov. de 2015

Rapidinha: Dimensionar Stage

e Olá Pessoal! Inaugurando hoje o "rapidinhas", onde eu posto exemplos rápidos de código. Hoje eu vi essa postagem no JavaFree e quis criar um exemplo rapidinho. Assim, fiz o programinha abaixo que permite manipular um Stage (tamanho, maximizar e fechar). Um gist está incorporado abaixo, mas também coloquei no github.