Vinculando beans e dados em um aplicativo de área de trabalho
Esse guia é uma introdução ao suporte no NetBeans IDE para vinculação de beans e de dados em aplicativos de área de trabalho Java.
Conteúdo
Para concluir este tutorial, você precisa dos seguintes recursos e softwares.
Introdução: vinculação de beans no NetBeans IDE
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 do seu aplicativo 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 destes recursos, você pode tentar os tutoriais Construindo um aplicativo 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 aplicativo 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 desmarcada a caixa de verificação Usar pasta dedicada para armazenar bibliotecas. (Se você estiver usando o NetBeans IDE 6.0, essa opção não está disponível.)
- 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 o aplicativo 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.
Vinculando beans personalizados
Na seção anterior, você vinculou propriedades de dois componentes Swing padrão adicionados ao formulário da Paleta. Você também pode vincular as propriedades de outros beans. Entretanto, para fazer isso, você precisa realizar algumas etapas para disponibilizar os recursos do IDE para gerar o código de vinculação desse bean. Você pode realizar uma das abordagens a seguir para tornar os recursos de vinculação do IDE disponíveis para um bean:
- Adicione o bean à paleta de forma que possa adicioná-lo a um formulário como adicionaria um componente Swing padrão.
- Adicione a classe bean ao projeto e compile o bean.
Para adicionar um Bean à janela de paleta:
- Verifique se o bean é compilado.
- Escolha Ferramentas > Paleta > Componentes Swing/AWT.
- Se desejar criar uma nova categoria de paleta para o Bean, clique em Nova categoria e insira o nome desejado antes de adicionar o Bean.
- Clique em Adicionar do JAR, Adicionar da biblioteca ou Adicionar do projeto e conclua o assistente para adicionar o Bean.
Para adicionar um bean a partir do seu projeto:
- Na janela Projeto, clique com o botão direito do mouse no nó do bean e escolha Compilar arquivo.
- Arraste o bean para o formulário.
Você deve ver o bean na janela Inspetor. Você pode chamar a caixa de diálogo Vincular de qualquer uma das propriedades do bean.
Configuração de vinculação avançada
O exemplo na primeira seção deste tutorial 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 do aplicativo 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.
Abaixo há uma lista de conversões para as quais você não precisa fornecer um conversor:
- BigDecimal para String, String para BigDecimal
- BigInteger para String, String para BigInteger
- Booleano para String, String para Booleano
- Byte para String, String para Byte
- Caractere para String, String para Caractere
- Duplo para String, String para Duplo
- Flutuante para String, String para Flutuante
- Int para String, String para Int
- Longo para String, String para BigDecimal
- Curto para String, String para Curto
- Int para Booleano, Booleano para Int
- 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
Além de sincronizar propriedades de componentes Swing visuais e outros beans personalizados, você pode usar a vinculação de beans para ajudar no uso de componentes visuais para interagir com um banco de dados. 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. Esta seção mostra como vincular dados a componentes JTable, JList e JComboBox Swing.
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.
- 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.
Observação: você também pode usar o assistente para Novo aplicativo de área de trabalho Java para criar rapidamente um aplicativo inteiro de trabalho que tenha recursos de CRUD (criar, ler, atualizar e excluir) em um modo de exibição mestre/ de detalhe. Consulte Construindo um aplicativo de banco de dados de área de trabalho Java para obter mais informações.
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 seu aplicativo 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
Esta seção mostra como você pode vincular dados a componentes JTable, JList e JComboBox.
Para adicionar uma tabela de banco de dados a um formulário e gerar automaticamente um JTable para exibir o conteúdo da tabela do banco de dados:
- Abra a janela Serviços (Ctrl-5).
- Conecte-se ao banco de dados que contém a tabela que você deseja adicionar ao formulário. (Você pode se conectar ao banco de dados clicando com o botão direito do mouse no nó da conexão do banco de dados e escolhendo Conectar.)
- Expanda o nó da conexão e expanda seu nó Tabelas.
- Arraste o nó para a tabela no formulário e pressione Ctrl enquanto arrasta a tabela.
Um JTable é criado e suas colunas são vinculadas às colunas na tabela do banco de dados.
Para vincular uma tabela de banco de dados a um componente JTable existente:
- 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 na 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 lista 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.
Para vincular os dados a um componente JComboBox:
- Clique com o botão direito do mouse na caixa de combinação 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.
- Clique com o botão direito do mouse na caixa de combinação novamente e escolha Vincular > Item selecionado.
- Vincule à propriedade que você deseja que seja afetada pela seleção do usuário. Clique em OK.
A biblioteca Vinculação de Beans (a partir da versão 1.2.1) não possui uma classe DetailBinding que permite que você especifique como derivar os valores de exibição de JComboBox. Portanto, você precisará escrever algum código personalizado. Uma abordagem é escrever um renderizador de célula personalizado, como mostrado abaixo.
Para renderizar a caixa de combinação adequadamente:
- Selecione a caixa de combinação.
- Na aba Propriedades da janela Propriedades, selecione a propriedade renderer.
- Clique no botão de reticências.
- Na caixa de combinação na parte superior do editor de propriedades, selecione Personalizar código.
- Na área de texto, indique um código semelhante ao seguinte (onde
jComboBox1 é o nome da instância JComboBox, MyEntityClass é a classe da entidade e getPropertyFromMyEntityClass() é o getter da propriedade na classe da entidade que você está vinculando.
jComboBox1.setRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (value instanceof MyEntityClass) {
MyEntityClass mec = (MyEntityClass)value;
setText(mec.getPropertyFromMyEntityClass());
}
return this;
}
})
Observação: você também pode criar um renderizador personalizado em seu próprio arquivo de código-fonte, compilar o arquivo, arrastar o renderizador para o formulário e definir a propriedade do renderizador da caixa de combinação para usar este bean. Você pode ver esta abordagem em uso no tutorial Criando um aplicativo de banco de dados de área de trabalho personalizado.
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 listas 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.
|
Consulte também
Para obter mais informações sobre como usar a Vinculação de beans no IDE, consulte Melhores práticas com JPA e Vinculação de beans.
Para uma introdução mais geral do uso do construtor de GUIs do IDE, consulte Introdução à construção de GUIs.
Para obter exemplos concretos sobre o uso dos recursos de vinculação de beans no IDE, consulte os tutoriais Construindo um aplicativo de banco de dados de área de trabalho Java.
Para ver como você pode usar o modelo de projeto Aplicativo de área de trabalho Java para construir um aplicativo de banco de dados com uma visualização Mestre/Detalhe, consulte Construindo um aplicativo 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.