Escolar Documentos
Profissional Documentos
Cultura Documentos
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
www.devmedia.com.br
[verso para impresso]
Link original: http://www.devmedia.com.br/articles
/viewcomp.asp?comp=32009
1 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
2 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
3 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
4 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
5 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
6 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
7 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
8 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
Modelo
Com a estrutura do projeto pronta, vamos criar a classe que
representar o domnio do nosso sistema, ou seja, a entidade que a
aplicao manipular.
Sendo assim, vamos comear criando a classe Cliente. No pacote
br.com.cadastro.model, crie a classe Cliente e a codifique conforme
a Listagem 1.
Listagem 1. Implementao da classe Cliente.
1. package br.com.cadastro.model.domain;
2.
3. import java.io.Serializable;
4. import java.util.Date;
5. import java.time.LocalDate;
6. import java.time.LocalDateTime;
7. import java.time.ZoneId;
8.
9. public class Cliente implements Serializable {
10.
11.
12.
13.
14.
15.
16.
public Cliente() {
17.
18.
19.
20.
this.nome = nome;
21.
this.cpf = cpf;
22.
this.dataNascimento = dataNascimento;
23.
this.telefone = telefone;
24.
25.
26.
9 de 24
27.
28.
02-03-2016 14:42
29.
30.
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
10 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
package br.com.cadastro.model.dao;
2.
3.
//imports omitidos
4.
5.
6.
7.
8.
9.
10.
11.
public GenericAbstractCrudDao() {
12.
13.
14.
15.
16.
getDatabase().add(entity);
17.
return entity;
18.
19.
20.
21.
getDatabase().remove(entity);
22.
getDatabase().add(entity);
23.
return entity;
24.
25.
26.
27.
28.
getDatabase().remove(entity);
}
29.
30.
31.
32.
return database;
}
33. }
11 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
12 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
public ClienteDao() {}
8.
@Override
9.
10.
11.
12.
if (o instanceof Cliente) {
13.
clientes.add((Cliente) o);
14.
15.
16.
return clientes;
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.}
13 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
package br.com.cadastro.model.facade;
2.
3.
//imports omitidos
4.
14 de 24
02-03-2016 14:42
5.
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
6.
7.
8.
9.
14.
15.
LocalDate dataNasc =
16.
17.
18.
LocalDateTime.ofInstant(c.getDat
19. }
8.
9.
15 de 24
public ClienteFacadeImpl() {
02-03-2016 14:42
10.
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
11.
12.
@Override
13.
14.
return clienteDao.salvar(cliente);
15.
16.
17.
@Override
18.
19.
return clienteDao.listar();
20.
21.
22.
@Override
23.
24.
clienteDao.remover(cliente);
25.
26.
27.
@Override
28.
29.
return clienteDao.editar(cliente);
30.
31.
32.
@Override
33.
34.
35.
return clienteDao.listarPeloNome(nome);
}
36. }
Controlador
Para darmos continuidade ao desenvolvimento, criaremos o controle do
fluxo da aplicao. O controle vem para gerenciar a comunicao entre
os demais componentes e controlar o fluxo de dados, regras de
negcios e aes dos usurios.
Portanto, no pacote br.com.cadastro.controller, crie a classe
ClienteController. Um pequeno trecho de cdigo, apresentado na
16 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
@FXML
2.
3.
4.
c.setNome(txtNome.getText());
5.
c.setCpf(txtCPF.getText());
6.
c.setTelefone(txtTelefone.getText());
7.
8.
if (!txtDataNascimento.getText().isEmpty()) {
9.
10.
c.setDataNascimento(releaseDate);
11.
12.
clienteFacade.salvar(c);
13.
txtNome.clear();
14.
txtCPF.clear();
15.
txtTelefone.clear();
16.
txtDataNascimento.clear();
17.
lblValidationError.setText("");
18.
tblClientes.getItems().setAll(clienteFacade.listarTodos());
19. }
20
21. @FXML
22. public void selecionarCliente(MouseEvent arg0) {
23.
Cliente c = tblClientes.getSelectionModel().getSelectedItem();
24.
txtNome.setText(c.getNome());
25.
txtCPF.setText(c.getCpf());
26.
txtTelefone.setText(c.getTelefone());
27.
txtDataNascimento.setText(dataFormatter.format(c.getDataNascimento()));
28. }
17 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
Viso
Deste modo a camada de back-end da nossa aplicao est finalizada.
Precisamos agora desenvolver o front-end, isto , a classe que ser
responsvel pela interao com o usurio.
Para isso, utilizaremos JavaFX. Apesar de no ser o foco deste artigo, o
uso dessa tecnologia para construir GUIs pode agregar uma experincia
visual mais interessante para o usurio e trazer mais produtividade para
18 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
o desenvolvedor.
Ela permite a criao de interfaces ricas com o uso de efeitos, alm de
dispor de uma API completa para criao de telas orientadas a
componentes.
O JavaFX traz suporte ao FXML, uma forma de declarar todos os
elementos de interface sem escrever uma linha de cdigo Java. A
grande vantagem disso est na possibilidade de usar uma ferramenta
para gerao da interface e a possibilidade de modificar o XML sem ter
que recompilar a aplicao inteira.
Para criar o FXML os seguintes passos so necessrios no NetBeans:
1. Clique com o boto direito na aplicao JavaApplicationCRUD;
2. Em seguida, clique em Novo e escolha a opo Outros;
3. Na coluna Categoria, escolha JavaFX, e na coluna Tipos de Arquivos,
escolha FXML vazio.
O cdigo desse arquivo est disponvel na Listagem 7. Sobre o FXML
produzido, alguns pontos merecem ateno; So eles:
A tag <AnchorPane>, utilizada na linha 5, sinaliza um layout para a
tela. Dentro dessa tag esto todos componentes adicionados ao
cadastro (boto, campo de texto, etc.);
O atributo fx:controller, visto na linha 6, usado para associar uma
classe de controle ao documento, sendo responsvel por coordenar o
comportamento dos componentes da interface;
O controle TableView, na linha 17, indica que linhas e colunas sero
desenhadas criando uma tabela. Nesta tabela, o evento
OnMouseClicked define que a operao selecionarCliente() da
classe Controller ser chamada quando um boto do mouse for
pressionado dentro dela.
19 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
20 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<columns>
19.
20.
21.
22.
23.
</columns>
24.
</TableView>
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
21 de 24
<children>
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
35.
</Label>
36.
</children>
37.
38.
</AnchorPane>
</children>;
6.
7.
launch();
}
8.
9.
10.
@Override
public void start(Stage palco) throws Exception {
11.
12.
13.
palco.setScene(new Scene(fxmlParent));
14.
palco.setTitle("Cadastro de Clientes");
15.
palco.setResizable(false);
16.
palco.show();
17.
18. }
22 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
23 de 24
02-03-2016 14:42
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?com...
Links
Endereo para download do Java 8.
http://www.oracle.com/technetwork/java/javase/downloads/
jdk8-downloads-2133151.html
Endereo para download do NetBeans 8.0.1.
https://netbeans.org/downloads/
Contedo sobre JavaFX.
http://www.oracle.com/technetwork/pt/java/javafx/
tech/index.html
Exemplo de uso da API Date and Time.
http://java.dzone.com/articles/java-8-apis-javautiltime
DevMedia
24 de 24
02-03-2016 14:42