Vinculando beans e dados em uma aplicação de área de trabalho
Esse guia é uma introdução ao suporte no NetBeans IDE 6.0 para vinculação de beans
e de dados em aplicações de área de trabalho Java.
Conteúdo
Software e arquivos necessários para o tutorial
Para este tutorial, você precisa ter instalados no computador os seguintes softwares:
Introdução: vinculação de beans no NetBeans IDE 6.0
Até o lançamento da biblioteca de vinculações de beans, era incômodo conectar componentes de IU a banco de dados ou manter os valores das propriedades do componente em sincronia. Por exemplo, a exibição de dados em um banco de dados padrão
em uma JTable requeria a criação manual de classes do utilitário para manipular
a conexão entre o banco de dados e a JTable. E manter valores
de propriedades de bean diferentes em sincronia (tal como o valor de um JTextField com
a renderização de um bean visual) requeria codificar manualmente os ouvintes e os manipuladores de eventos.
A biblioteca de vinculação de beans simplifica e padroniza tudo isso. Você pode simplesmente escrever algumas linhas
de código para estabelecer quais propriedades de quais componentes precisam ser
mantidas em sincronia, e a biblioteca de vinculação de beans manipula o resto. No NetBeans IDE, os recursos de vinculação de beans são integrados no
Construtor de GUIs, para que você possa ter rapidamente o comportamento
da sua aplicação codificado, depois que tiver estabelecido o design visual.
Este guia é uma visão geral dos aspectos principais da vinculação de beans no IDE.
Para obter um exemplo concreto de muitos desses recursos, você pode experimentar o
tutorial Construindo uma aplicação de banco de dados de área de trabalho Java.
Vinculando propriedades a outras propriedades
Fundamentalmente, a vinculação de beans é uma forma de conectar as propriedades do bean sem usar audição de eventos e manipulação de código.
Para ilustrar o conceito de vinculação de beans e como o IDE a suporta, faremos um exemplo simples onde um usuário pode ajustar um controle deslizante para alterar um valor numérico em um campo de texto.
Para configurar o exemplo:
- No IDE, escolha Arquivo > Novo projeto.
- Selecione a categoria Java e selecione o modelo de aplicação Java.
Clique em Próximo.
- Na página Nome e localização do assistente, realize as seguintes operações:
- Digite NumberSlider como o nome do projeto.
- Deixe marcada a caixa de verificação Definir como projeto principal.
- Desmarque a caixa de verificação Criar classe principal.
- Clique em Terminar para sair do assistente e configurar o projeto.
- Na janela Projetos, clique com o botão direito do mouse no nó do projeto NumberSlider e selecione Novo > Formulário JFrame.
(Se o formulário JFrame não estiver disponível no menu Novo, escolha Outro.
Em seguida, no assistente para Novo arquivo, selecione a categoria Formulários de GUI Swing e selecione o modelo Formulário JFrame).
- Na página Nome e localização do assistente, realize as seguintes operações:
- Digite NumberSliderFrame para o nome da classe.
- Digite numberslider como o nome do pacote.
- Clique em Terminar para sair do assistente e criar o formulário.
NumberSliderForm.java deve abrir no modo de design na área de edição.
- Na seção Controles Swing da Paleta, arraste um componente de controle deslizante para a área de design. (Se a janela Paleta não estiver aberta,
escolha Janela > Paleta).
- Da Paleta, arraste um componente de campo de texto para a área de design.
O formulário resultante é parecido com a captura de tela abaixo. Entretanto,
o posicionamento não é importante para fins deste exemplo.
Origem e destino
Agora que precisamos configurar o exemplo, estamos prontos para criar a vinculação. Entretanto, primeiro precisamos determinar qual componente será a origem da vinculação e qual será o destino.
O componente da origem da vinculação é de onde um valor da propriedade primeiro se origina.
Ao vincular no Editor de GUI, você inicia uma vinculação no destino e, em seguida, declara a origem na caixa de diálogo Vincular.
Nesse caso, já que o JSlider vem com um intervalo padrão de valores,
iremos usá-lo como a origem.
Observação: As vinculações podem ser de duas vias (leitura/gravação), para que as alterações no destino sejam automaticamente refletidas na origem. Entretanto, a direção da vinculação inicial é sempre da origem para o destino. Consulte as informações no Modo de atualização na seção
Configuração de vinculação avançada.
Para vincular o controle deslizante ao campo de texto:
- Clique com o botão direito do mouse no componente de campo de texto e escolha Vincular > texto para abrir a caixa de diálogo Vincular.
- Na caixa de combinação Origem da vinculação, selecione jSlider1.
- Na caixa de combinação Expressão de vinculação, selecione value int
como mostrado na imagem abaixo.
- Clique em OK.
Você acabou de vincular a propriedade de bean value do controle deslizante ao valor text do campo de texto.
Na área de design, o campo de texto deve mostrar o valor 50. Esse valor reflete o fato de que o controle deslizante está na posição intermediária
e o intervalo padrão de valores do controle deslizante é de 0 a 100.
Agora você pode executar a aplicação e ver a vinculação em ação.
Para executar o projeto:
- Escolha Executar > Executar projeto principal.
- Na caixa de diálogo Executar projeto, clique em OK para aceitar numberslider.NumberSliderForm como a classe principal.
A aplicação deve iniciar em uma janela separada. Ajuste o controle deslizante na aplicação em execução e observe a alteração do valor no campo de texto.
Configuração de vinculação avançada
O exemplo acima mostra uma vinculação direta com alguns comportamentos padrão.
Mas às vezes você pode querer ou precisar configurar sua vinculação diferentemente. Se
for esse o caso, você pode usar a aba Avançado da caixa de diálogo Vinculação.
A aba Avançado da caixa de diálogo contém os seguintes campos:
- Nome. Permite que você crie um nome para a vinculação, o que lhe dá mais flexibilidade para gerenciar suas vinculações. O nome é adicionado ao construtor da vinculação e pode ser referenciado com o método getName() da vinculação.
- Atualizar modo. Especifica a forma em que as propriedades são mantidas em sincronia.
Os valores possíveis são:
- Sempre sincronizar (leitura/gravação). Sempre que é feita uma alteração na origem ou no destino, o outro é atualizado.
- Ler somente da origem (somente leitura). O destino só é atualizado na primeira vez em que o valor de origem é definido. As alterações feitas na origem são atualizadas no destino. As alterações feitas no destino são atualizadas na origem.
- Ler da origem uma vez (ler uma vez). O destino só é atualizado quando está inicialmente vinculado à origem.
- Atualizar origem quando (disponível somente para a propriedade texto dos componentes JTextField e JTextArea). Permite que você selecione a freqüência com que as propriedades são sincronizadas.
- Ignorar ajustando disponível para a propriedade valor de JSlider; para a propriedade selectedElement de JTable e JList; e para a propriedade selectedElements de JTable e JList).
Se esta caixa de verificação estiver selecionada, quaisquer alterações feitas na propriedade são propagadas para outra propriedade até que o usuário finalize a alteração. Por exemplo, quando o usuário da aplicação arrasta um controle deslizante, o valor da propriedade ao qual a propriedade valor do controle deslizante está vinculada só é atualizado quando o usuário libera o botão do mouse.
- Conversor. Se a sua vinculação envolve propriedades com tipos de dados diferentes, você pode especificar o código que converte os valores entre os tipos.
A biblioteca de vinculação de beans manipula muitas conversões usadas comumente, mas talvez você precise fornecer seus próprios conversores para outras combinações de tipos de propriedade.
Tais conversores precisam estender a classe org.jdesktop.beansbinding.Converter.
A lista suspensa Conversor é preenchida com quaisquer conversores que foram adicionados como beans ao seu formulário. Você também pode adicionar o código de conversão diretamente, clicando no botão de reticências (...), e selecionando Personalizar código na lista suspensa Selecionar propriedade do conversor usando.
- Validador. Permite que você especifique o código para validar uma alteração no valor da propriedade de destino antes de propagar essa atualização de volta para a propriedade de origem.
Por exemplo, você pode usar um validador para garantir que um valor de propriedade inteiro esteja em um interface específico.
Os validadores precisam estender a classe
org.jdesktop.beansbinding.Validator.
A lista suspensa Validador é preenchida com quaisquer validadores que foram adicionados como beans ao seu formulário. Você também pode adicionar o código de validação diretamente, clicando no botão de reticências (...), e selecionando Personalizar código na lista suspensa Selecionar propriedade do validador usando.
- Valor de origem nulo. Permite que você especifique um valor diferente para usar se a propriedade de origem possuir um valor nulo quando a vinculação for tentada.
Este campo corresponde ao método setSourceNullValue() da classe org.jdesktop.beansbinding.Binding.
- Valor de origem não-legível. Permite que você especifique um valor diferente para ser usado se a expressão de vinculação não puder ser resolvida quando a vinculação é tentada.
Este campo corresponde ao método setSourceUnreadableValue() da classe org.jdesktop.beansbinding.Binding.
Observação: Para entender melhor as classes e os métodos mencionados acima, você pode acessar a documentação de Javadoc da vinculação de beans diretamente no IDE. Escolha Ajuda > Referências de Javadoc > Vinculação de beans. Na janela do navegador que se abre, clique no link org.jdesktop.beansbinding para a documentação dessas classes.
Vinculando dados a componentes
Quando tiver criado um novo formulário Java e adicionado componentes ao formulário, você pode gerar código para vincular esses componentes aos dados. O IDE torna mais fácil vincular dados aos componentes Swing JTable, JList e JComboBox.
Antes de vincular um componente a dados de um banco de dados, você precisa ter concluído as seguintes coisas:
- Conectado a um banco de dados no IDE.
- Adicionado o componente a um formulário no Construtor de GUI.
- Criado classes que representam as tabelas de banco de dados às quais você deseja se vincular. Os passos para criar as classes de entidade para vincular dados a um componente são fornecidos a seguir.
Criando classes de entidade
Para criar classes de entidade para representar o banco de dados que é vinculado a JTable:
- Na janela Projetos, clique com o botão direito do mouse em seu projeto e escolha Novo > Outro, selecione a categoria Persistência, e selecione as Classes de entidade no modelo de banco de dados.
- Na página Tabelas de banco de dados do assistente, selecione a conexão de banco de dados.
- Quando a coluna Tabelas disponíveis é preenchida, selecione as tabelas que você deseja usar em sua aplicação e clique em Adicionar para movê-las para a coluna Tabelas selecionadas. Clique em Próximo.
- Na página Classes de entidade do assistente, verifique se a caixa de diálogo Gerar anotações de consulta nomeadas para campos persistentes está marcada.
- Faça quaisquer personalizações que deseja fazer nos nomes das classes geradas e em sua localização.
- Clique em Criar unidade de persistência.
- Na caixa de diálogo Criar unidade de persistência, verifique as seguintes coisas:
- se a biblioteca de persistência selecionada é TopLink.
- se a estratégia de geração de tabela selecionada é "None".
- Clique em Terminar.
Você deve ver nós das classes de entidade na janela Projetos.
Vinculando componentes aos beans que representam os dados
Para vincular os dados a um componente JTable:
- Clique com o botão direito do mouse no Construtor de GUI e escolha Vincular > elementos.
- Clique em Importar dados para formulário. Na caixa de diálogo Importar dados para formulário, selecione a tabela de banco de dados a qual você deseja vincular seus componentes.
Clique em OK.
- Na caixa de combinação Vincular origem, selecione o item que representa a lista de resultados da classe da entidade. Por exemplo, se a classe da entidade for chamada, Customer.java, o objeto da lista seria gerado como customerList.
- Deixe o valor expressão de vinculação como nulo.
- Se houver quaisquer colunas de banco de dados que você deseja que apareça em JTable, selecione essas colunas na lista Selecionado e mova-as para a lista Disponível.
- Selecione a aba Avançado para configurar a vinculação. Por exemplo, você pode especificar um validador ou conversor, ou pode especificar o comportamento se a origem da vinculação for nula ou ilegível.
- Clique em OK.
Para vincular os dados a um componente JList:
- Clique com o botão direito do mouse no Construtor de GUI e escolha Vincular > elementos.
- Clique em Importar dados para formulário. Na caixa de diálogo Importar dados para formulário, selecione a tabela de banco de dados a qual você deseja vincular seus componentes.
Clique em OK.
- Na caixa de combinação Vincular origem, selecione o item que representa a lista de resultados da classe da entidade. Por exemplo, se a classe da entidade for chamada, Customer.java, o objeto da lista seria gerado como customerList.
- Deixe o valor expressão de vinculação como nulo.
- Na lisa suspensa Exibir expressão, selecione a propriedade que representa a coluna do banco de dados que contém os valores que você deseja exibir na lista.
- Selecione a aba Avançado para configurar a vinculação.
- Clique em OK.
Observação: Você pode usar o assistente para Nova aplicação de área de trabalho Java para criar rapidamente uma aplicação de trabalho inteira que tenha recursos de CRUD
(criar, ler, atualizar e excluir). Entretanto, é melhor gerar todas as classes da entidade antes para garantir que todas as relações entre as entidades estejam corretamente cobertas pelas classes geradas.
Propriedades de vinculação especiais
Onde necessário, a biblioteca de vinculação de beans fornece propriedades sintéticas especiais para alguns componentes Swing que estão faltando nos próprios componentes. Essas propriedades representam coisas, tais como uma linha selecionada da tabela, que são úteis para vincular a outras propriedades.
Abaixo há uma lista de propriedades sintéticas adicionadas pelas bibliotecas de vinculação de beans:
| Componente |
Propriedade |
Descrição |
| AbstractButton |
selecionado |
O estado selecionado de um botão. |
| JComboBox |
selectedItem |
O item selecionado de uma JComboBox. |
| JSlider |
valor |
O valor de um JSlider; notifica de todas as alterações. |
| value_IGNORE_ADJUSTING |
O mesmo que "valor" mas não notifica de alteração enquanto o controle deslizante está ajustando seu valor. |
| JList |
selectedElement |
O elemento selecionado de uma JList; notifica de todas as alterações.
Se houver uma JListBinding com a JList como destino, o elemento selecionado é indicado como um elemento da lista de origem da vinculação. Caso contrário, o elemento selecionado é indicado como um objeto do modelo da lista. Caso nada esteja selecionado, a propriedade é avaliada como nula. |
| selectedElements |
Uma lista que contém os elementos selecionados de uma JList; notifica de todas as alterações. Se houver uma JListBinding com a JList como destino, os elementos selecionados são indicados como elementos da lista de origem da vinculação. Caso contrário, os elementos selecionados são indicados como objetos do modelo da lista. Caso nada esteja selecionado, a propriedade é avaliada como uma lista vazia. |
| selectedElement_IGNORE_ADJUSTING |
O mesmo que "selectedElement" mas não notifica de alteração enquanto a seleção da lista está sendo atualizada. |
| selectedElements_IGNORE_ADJUSTING |
O mesmo que "selectedElements" mas não notifica de alteração enquanto a seleção da lista está sendo atualizada. |
| JTable |
selectedElement |
O elemento selecionado de uma JTable; notifica de todas as alterações.
Se houver uma JTableBinding com a JTable como destino, o elemento selecionado é indicado como um elemento da lista de origem da vinculação. Caso contrário, o elemento selecionado é indicado como um mapa onde as
chaves são compostas da "coluna" da string mais o índice da coluna
e os valores são valores de modelo dessa coluna. Exemplo:
{column0=column0value, column1=column1value, ...}
Caso nada esteja selecionado, a propriedade é avaliada como nula. |
| selectedElements |
Uma lista que contém os elementos selecionados de uma JTable; notifica de todas as alterações. Se houver uma JTableBinding com a JTable como destino, os elementos selecionados são indicados como elementos da lista de origem da vinculação. Caso contrário, cada elemento selecionado é indicado como um mapa onde as
chaves são compostas da "coluna" da string mais o índice da coluna
e os valores são valores de modelo dessa coluna. Exemplo:
{column0=column0value, column1=column1value, ...}
Caso nada esteja selecionado, a propriedade é avaliada como uma lista vazia.
|
| selectedElement_IGNORE_ADJUSTING |
O mesmo que "selectedElement" mas não notifica de alteração enquanto a seleção da tabela está sendo atualizada. |
| selectedElements_IGNORE_ADJUSTING |
O mesmo que "selectedElements" mas não notifica de alteração enquanto a seleção da tabela está sendo atualizada. |
| JTextComponent (incluindo suas subclasses JTextField, JTextArea e JEditorPane) |
texto |
A propriedade texto de um JTextComponent; notifica de todas as alterações (incluindo digitação). |
| text_ON_FOCUS_LOST |
A propriedade de texto de um JTextComponent; notifica de alteração somente quando o foco é perdido no componente.
|
| text_ON_ACTION_OR_FOCUS_LOST |
A propriedade de texto de um JTextComponent; notifica de alteração somente quando o componente notifica de actionPerformed ou quando o foco é perdido no componente.
|
Veja também
Para uma introdução mais geral ao uso do Construtor de GUIs do IDE, consulte Construção de GUIs no NetBeans IDE.
Para ver como você pode usar o modelo de projeto Aplicação de área de trabalho Java para construir uma aplicação de banco de dados com uma visualização Mestre/Detalhe, consulte Construindo uma aplicação de área de trabalho Java.
Para obter mais informações sobre a vinculação de beans, consulte a
página do projeto Vinculação de beans em java.net.
Para obter informações gerais sobre componentes JavaBeans, consulte
Trilha de beans do tutorial Java.
Para obter dicas e truques gerais sobre o uso do Construtor de GUIs no NetBeans IDE, consulte Perguntas freqüentes do Editor de GUIs
e Log da Web de Patrick Keegan.