Dúvida com JComboBox [RESOLVIDO]

Boa noite pessoal. Estou desenvolvendo uma pequena aplicação com Swing e me surgiu um problema.
Tenho um JComboBox que exibe em cada item seu o CNPJ e o nome da empresa.
Exemplo: 03.425.034/0001-16. 29 - Empresa 1
Eu gostaria de setar um item do JComboBox sabendo apenas o cnpj.

Tente criar duas JComboBox, daí você pode relacioná-las de modo que, selecionando o CNPJ na primeira, aparece o nome da empresa na segunda e vice-versa.

Uma forma fácil de fazer isso é criar uma classe bem simplesinha que contenha esses campos (CNPJ, Nome da empresa), cujo método toString retorne o CNPJ e o nome concatenados (é isso que aparece no combo).
Então você popula o combo com elementos dessa classe.
Para você selecionar um elemento pelo CNPJ, pegue a lista de objetos contida no combo, e vá procurando até achar o índice do objeto cujo CNPJ bate.

Thingol, eu tinha resolvido assim: Consultava o banco para saber o nome através do cnpj.
Mas acho sua solução bem interessante.
Obrigado.

Huahauahuaha… funciona, mas é tosco na visão de quem programa swing :slight_smile:

Visão ideal:

Criar uma classe que represente o Cliente (contendo as propriedades de Nome, CPF, endereço, etc…)
Implementar os métodos: toString(), equals() e hashCode() - aprenda sobre pra que estes métodos funcionam antes e como implementa-los corretamente , pois eles são responsáveis por saber se uma instancia equivale a outra: se uma empresa é a mesma que a outra.

Na JCombobox, você deve adicionar o objeto normalmente no model dela. Até aí tudo bem. Agora você precisa criar o Renderer pra JCombobox que entenda que quando o objeto for o SEU objeto, ele deve pegar o conteudo do Nome da empresa (ou outro valor) pra mostrar na combo.

O Renderer ficaria algo assim:

        ListCellRenderer renderer = new ListCellRenderer(){
            JLabel componente;
            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
                    boolean cellHasFocus) {
                componente = new JLabel();
                componente.setText(((Empresa)value).getCNPJ());
                return componente;
            }
        };

E depois pra setar na combo é só

setRenderer(renderer);

Na verdade o melhor é criar uma classe separada, tipo ComboBoxEmpresaRenderer… :smiley:

Era justamente isso que eu estava precisando. Valeu mesmo!