Escolar Documentos
Profissional Documentos
Cultura Documentos
O ComboBox mostra, para cada amigo cadastrado, o string retornado pelo método toString da
entidade Amigo. Não faz sentido mostrar todas as informações do amigo em cada linha do
ComboBox. O mais adequado é mostrar somente uma visão (utilizando o linguajar de banco de
dados, para visualização somente da informação de interesse) contendo algumas informações que
sejam amigáveis para aparecer no ComboBox. Nesta aplicação, os dados nome e o apelido foram
escolhidos como sendo as informações mais amigáveis para serem visualizadas em cada linha do
ComboBox. Lembrando que o apelido não é um campo com preenchimento obrigatório (script SQL
no Tutorial 2), o método toString da entidade Amigo fica da seguinte forma:
Para inicializar somente os dados nome e apelido, na construção do objeto da entidade Amigo, é
criado um segundo construtor :
Com a utilização do ComboBox, para visualização dos amigos cadastrados, o trecho inicial não se
altera, pois não envolve nenhuma operação no ComboBox. O trecho final é alterado para que o
ocorra a inserção da visão do amigo (visualização somente dos atributos: nome e apelido) recém-
criado no ComboBox e à seleção da visão inserida no ComboBox:
Observe que com a utilização do ComboBox, a utilização janela auxiliar para informar inserão bem
sucedida não é mais necessária, dado que o novo amigo cadastrado é visualizado no ComboBox.
Observe que o método getSelectItem, utilizado para ler a visão do amigo selecionada no
ComboBox, é um método genérico e, portanto, retorna um objeto de tipo Object que precisa ser
convertido para um objeto da entidade Amigo.
O trecho final do tratador de eventos removerAmigo, é alterado para remover a visão do amigo
recém-criado no ComboBox, e para selecionar a primeira visão (se existir),:
Para alterar dados do amigo, com exceção do atributo nome que é utilizado como chave no banco
de dados, a ação mais recomedável é consultar o amigo de interesse e alterar os atributos que se
deseja atualizar. No entanto, o usuário pode optar por simplesmente limpar todos os campos do
formulário e preencher o nome do amigo e os dados que deseja atualizar. Desta forma, na
implementação do tratador de eventos alterarAmigo, é assumido que usuário poderá informar o
nome do amigo, sem ter realizado previamente uma consulta. Caso o usuário tenha alterado o
campo apelido, será necessário alterar a sua visualização no ComboBox. Será necessário utilizar o
nome, informado pelo usuário, para identificar a visão correspondente no ComboBox e atualizar o
valor do campo apelido.
O trecho inicial do tratador de eventos alterarAmigo não se altera, pois não envolve nenhuma
operação no ComboBox. O trecho final é alterado, pois caso o apelido do amigo tenha sido alterado,
a visualização da visão no ComboBox precisará ser atualizada:
Observe que a simples alteração de um atributo da visão, não resulta na atualização automática da
sua visualização no ComboBox, como ocorre no caso de inserção ou remoção de uma visão. Neste
caso, é necessário solicitar a atualização com a utilização do método updateUI.
A visão vai encorporar o sequencial e o título do filme. A seguir, o método toString da entidade
Filme:
A coluna (e chave) Sequencial é criada automaticamente pelo banco de dados, como um número
inteiro positivo sequencial, iniciando com o valor 1. A cada novo registro criado, o valor do
sequencial recebe o valor do último sequencial criado incrementado de 1. Se um registro da tabela
for removido, o seu número sequencial não será reaproveitado na criação do próximo registro.
Na implementação da entidade Filme, vamos utilizar List para a visualização dos filmes cadastrados
e ComboBox para a seleção do gênero do filme.
Na criação do objeto filme, não é necessário ler o atributo sequencial, dado que ele é criado
automaticamente pelo banco de dados. Por esse motivo o campo sequencialTextField da
JanelaCadastroFilme é assinalado com não editável, sendo preenchido somente por programa, após
o número do sequencial ter sido criado no banco de dados:
Propriedades
◦ editable : não assinalar
Por não envolver a utilização do List, o trecho inicial do tratador de eventos inserirFilme, da
JanelaCadastroFilmes, é semelhante ao trecho inicial do tratador de eventos inserirAmigo da
JanelaCadastroAmigos. No entanto, no trecho final é necessário: (a) atualizar o modelo do List com
o filme recém-criado; (b) selecionar o visão inserida no List; e (c) informar o sequencial, recém-
criado no BD:
Em uma aplicação web, dois usuários podem executar de forma concorrente, em dois processos
paralelos, a mesma operação. No entanto, em uma aplicação desktop, as operações são executadas
sequencialmente por um único usuário. Portanto, para saber o número do sequencial que foi
atribuído a um filme recém-criado, basta ler o número do último sequencial criado no banco de
dados para a tabela Filmes. A seguir, a implementação do método estático últimoSequencial da
entidade Filme:
Observe, no script sql, que o atributo gênero é armazenado na tabela Filmes como um inteiro. O
valor que será armazenado na respectiva coluna da tabela, como resultado da execução dos métodos
estáticos inserirFilme e alterarFilme da entidade Filme, é o índice no enumerado Gênero obtido da
seguinte forma:
int índice_gênero = filme.getGênero().ordinal()
No caso da entidade Amigo, o nome é utilizado como chave no banco de dados. Para evitar a
criação de um amigo com os mesmos dados, basta verificar se o nome do amigo já existe no banco
de dados. No entanto, o sequencial, que é utilizado como chave do filme, é gerado automaticamente
pelo banco de dados. Desta forma, se o usuário preencher os mesmos dados de um filme já
existente, esse filme será criado novamente no banco com um novo sequencial. Obviamente o
método inserirFilme do ControladorCadastroFilmes deve ser implementado de forma a evitar essa
duplicidade:
Para alterar os dados do filme, com exceção do atributo sequencial que é utilizado como chave no
banco de dados, a única alternativa disponível para o usuário é consultar o amigo de interesse e
alterar os atributos que se deseja atualizar. Esta restrição ocorre porque, diferentemente da
JanelaCadastroAmigos, na qual a chave (nome) é editável, o campo sequencialTextField não é
editável porque o sequencial é criado automaticamente pelo BD.
Exercício 1
Atualize a aplicação desktop Biblioteca para cadastrar livros e consulentes em um banco de dados
relacional, utilizando interface gráfica. Utilize ComboBox para listar os consulentes cadastrados e
List para listar os livros cadastrados. Utilize ComboBox para seleção da área de conhecimento do
livro. Suponha:
a) JanelaCadastrarConsulentes, supondo que a entidade Livro tenha os seguintes atributos:
String CPF, nome, email, telefone.
b) JanelaCadastrarLivros, supondo que a entidade Livro tenha os seguintes atributos:
enum ÁreaConhecimento { agronomia, computação, direito, física, matemática, medicina,
nutrição, química };
String título, autorPrincipal, anoPublicação, editora;
int versão;
Exercício 2
Atualize a aplicação desktop de sua escolha, com mais uma janela de cadastro. Utilize ComboBox
para listar os itens cadastrados da primeira janela de cadastro e List para listar os itens cadastrados
da segunda. Utilize ComboBox para seleção da valores de enumerado em pelo menos uma das
janelas de cadastro.