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
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…
Era justamente isso que eu estava precisando. Valeu mesmo!