Como vincular dados a um JComboBox
Autor: Márcio Júnior | Publicado: 2012-03-07T12:20:00-03:00


Atualmente estou trabalhando num projeto no qual utilizo o framework JPA. Então a cada dia que passa eu acabo aprendendo algo novo sobre esta API e espero com essa experiência poder ajudar os que estão começando agora.

Hoje vou falar um pouco sobre como vincular dados que se encontram em uma tabela do banco a um componente JComboBox. A vinculação é simples de se fazer, mas a exibição da propriedade desejada é um pouco mais complicada como veremos adiante. Vou apresentar um passo a passo que traduzi do site netbeans.org, mas com algumas correções (o exemplo de código do site na parte "To render the combo box propertly" não funciona).

Vamos ao que interessa:



1. Clique com o botão direito no combo box e escolha Bind &gt; elements (Vincular &gt; elements).&nbsp;



2. Clique em Import Data to Form (Importar dados para o Formulário...). Selecione a conexão e tabela que voce deseja vincular o combo box. Clique em OK.&nbsp;



3. No combo From the Binding Source (Origem da vinculação), selecione o item que representa o result list da entidade. Por exemplo, se a entidade se chama Cliente.java, o objeto da lista deve ser gerado como clienteList.&nbsp;



4. Deixe o valor em Binding Expression (Expressão de vinculação) como null e clique em OK.&nbsp;



5. Clique com o botão direito no combo box novamente e escolha Bind &gt; selectedItem (Vincular &gt; selectedItem). Vincule a propriedade que será afetada pela selecão do usuário e clique em OK (normalmente o result list escolhido no passo 3).&nbsp;



Até aqui já temos os dados vinculados ao combo box, porém se executar o programa verá que o combo mostrará dados da entidade selecionada convertida em String (objeto.toString()) e não uma propriedade específica:





Isto acontece porque, segundo o próprio site do NetBeans, a biblioteca Beans Binding não tem uma classe DetailBinding que permite especificar os valores exibidos no JComboBox.

Uma forma de resolver isto é escrever um código personalizado para mostrar a propriedade que queremos:&nbsp;



1. Selecione o combo box.&nbsp;



2. Na aba Propriedades da Janela de Propriedades, selecione a propriedade render.&nbsp;



3. Clique no botão ...&nbsp;



4. No combo na parte superior do editor de propriedades, selecione Custom Code (Código personalizado).&nbsp;



5. Na área de texto, entre com um código parecido com o que segue abaixo onde Usuario é o nome da sua entidade e getUsuario é a propriedade que retorna o valor a ser vinculado.&nbsp;


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 Usuario) {
            Usuario usuario = (Usuario) value;
            setText(usuario.getUsuario());
        }
        return this;
    }
}
Feito isso, o valor selecionado deverá aparecer no combo:




Uma outra abordagem mais simples para resolver o problema é sobrescrever o método toString da entidade em questão:

    @Override
    public String toString() {
        return getUsuario();
    }&nbsp;

Basta fazer com que o método retorne o valor que você deseja mostrar no combo box. É isso aí! Espero que tenham gostado.