FeaturesPluginsDocs & SupportCommunityPartners

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

O conteúdo desta página se aplica ao NetBeans 6.0
Introdução: vinculação de beans no NetBeans IDE 6.0
Vinculando propriedades a outras propriedades
Propriedades de vinculação avançadas
Vinculando dados a componentes
Propriedades de vinculação especiais

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:

  1. No IDE, escolha Arquivo > Novo projeto.
  2. Selecione a categoria Java e selecione o modelo de aplicação Java. Clique em Próximo.
  3. 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.

    Imagem mostrando a página Nome e localização do assistente para Nova aplicação Java
                com as informações do projeto preenchidas.

  4. Clique em Terminar para sair do assistente e configurar o projeto.
  5. 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).

  6. 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.

    Imagem mostrando a página Nome e localização do assistente para Novo JFrame
                com as informações do arquivo preenchidas.

  7. 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.

  8. 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).
  9. 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.

    Imagem mostrando o formulário com o controle deslizante e o campo de texto adicionados ao formulário.

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:

  1. 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.
  2. Na caixa de combinação Origem da vinculação, selecione jSlider1.
  3. Na caixa de combinação Expressão de vinculação, selecione value int como mostrado na imagem abaixo.

    Imagem mostrando valores a serem selecionados na caixa de combinação Origem da vinculação.

  4. 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:

  1. Escolha Executar > Executar projeto principal.
  2. 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.

Imagem mostrando o aplicativo em execução com o controle deslizando movido e o valor de texto alterado.

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:

  1. 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.
  2. Na página Tabelas de banco de dados do assistente, selecione a conexão de banco de dados.
  3. 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.

    Imagem mostrando a página Tabelas de banco de dados do assistente para Novas classes de entidade do banco de dados com as tabelas CUSTOMER e DISCOUNT_CODE selecionadas.

  4. 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.
  5. Faça quaisquer personalizações que deseja fazer nos nomes das classes geradas e em sua localização.

    Imagem mostrando a página Classes de entidade do assistente para Novas classes de entidade do banco de dados.

  6. Clique em Criar unidade de persistência.
  7. 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".
    • Imagem mostrando a caixa de diálogo Criar unidade de persistência.

  8. 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:

  1. Clique com o botão direito do mouse no Construtor de GUI e escolha Vincular > elementos.
  2. 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.
  3. 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.
  4. Deixe o valor expressão de vinculação como nulo.
  5. 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.
  6. 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.
  7. Clique em OK.

Para vincular os dados a um componente JList:

  1. Clique com o botão direito do mouse no Construtor de GUI e escolha Vincular > elementos.
  2. 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.
  3. 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.
  4. Deixe o valor expressão de vinculação como nulo.
  5. 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.
  6. Selecione a aba Avançado para configurar a vinculação.
  7. 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.

Bookmark this page

del.icio.us furl simpy slashdot technorati digg
Companion
Projects:
MySQL Database Server   Open JDK: an Open SourceJDK   GlassFish Community: an Open Source Application Server    Mobile & Embedded Community    Open Solaris   java.net - The Source for Java Technology Collaboration   Open ESB - The Open Enterprise Service Bus Powered by