GlazedList - Como trabalhar com Codigo e Descricao

3 respostas
L

Boa tarde pessoal, estou agarrado com um problema e espero que possam me ajudar.

Tenho uma consulta que retorna 2 colunas, codigo e descricao.

Estou utilizando o GlazedList para inserir a descrição em um JComboBox, e funcionou perfeitamente.

Problema: Eu preciso pegar o código relacionado a descrição que o usuário selecionou na JComboBox.

Isso é possível? Se não, como é feito normalmente, pois já vi vários sistemas que após selecionar a descrição, o campo de código é preenchido automaticamente.

Observação: Não vale fazer a consulta no banco novamente, ou seja, após selecionar a descriçao, pois esta coluna pode repetir, o que traria mais de 1 código para a mesma descrição ok!

Agradeço desde já.

3 Respostas

E

Não entendo muito de Swing, mas tentou passar para o JComboBox o objeto que é retornado do banco de dados e sobrescrever o método toString? por exemplo:

public class Objeto1{
  private String codigo;
  private String descricao;

  // setters and getters
  public String toString(){
    return descricao;
  }
}

Ou criar um Map em que a chave é a descrição, e você pega o objeto a partir da descrição?

E

Crie uma classe bem simples como esta aqui (estou simplificando bastante, obviamente você tem de criar getters/setters etc.)

class CodigoEDescricao {
    public int codigo;
    public String descricao;
    public String toString() { return descricao; }
}

e a seguir, na hora de criar um Model para o seu Combo, crie uma instância de EventComboBoxModel (EventList).

http://publicobject.com/glazedlists/glazedlists-1.7.0/api/ca/odell/glazedlists/swing/EventComboBoxModel.html
Na hora de inserir elementos nesse ComboBox, você tem de inserir objetos desse tipo (CodigoEDescricao) em um EventList, em vez de simplesmente inserir as descrições.

Note que você pode usar, por exemplo, no seu Combo, uma lista ordenada pelo GlazedLists (lembre-se que um SortedList é um EventList: )
http://publicobject.com/glazedlists/glazedlists-1.7.0/api/ca/odell/glazedlists/SortedList.html
só que nesse caso você tem de ordenar sua lista, digamos, por descrição. Se for isso, então você tem de fazer a classe CodigoEDescricao implementar Comparable.

L

Cara…obrigado pela ajuda, porém não consegui implementar o que postou (apesar de ter feito vários testes aqui).

Sem querer ser chato, mas voltei o código da forma que estava funcionando com a descrição, você pode dar uma olhada e me mostrar como deve ser?

Segue apenas a parte do código que insere somente a descrição no combobox. Removi os try’s para ficar mais fácil visualizar.

sql = "select codigo, descricao from fcfo";

        final EventList glazedlistFcfo = new BasicEventList();

        stmt = con.createStatement();
        rs = stmt.executeQuery(sql);

        while (rs.next()) {
                // enquanto receber dados da tabela adciona esse dados no galzedlist
                glazedlistFcfo.add(rs.getString("descricao"));
        }

        // cria o auto complete
        SwingUtilities.invokeLater(new Runnable() {public void run() {
                AutoCompleteSupport autoComplete = AutoCompleteSupport.install(jComboBoxNomeFornecedor, glasedlistFcfo);
            }
        });

Desta forma o autocomplete funciona perfeitamente para a descrição, porém, eu não consigo pegar o código.

Criado 9 de novembro de 2011
Ultima resposta 10 de nov. de 2011
Respostas 3
Participantes 3