Então, eu pessoalmente nunca usei usei um enum para preencher um jComboBox mas sempre usei uma array de String; ao invés de você definir um enum defina no lugar um array de string contendo String[] EstadoCivilEnum = {"Solteiro(a)", "Casado(a)","Viúvo(a)","Divorciado(a)"}; isso deve funcionar corretamente, mas com relação ao enum n posso falar muito numca usei muito ele :(, o problema deve ta ocorrendo quando você usa o metodo “values()” do enum ele não deve retornar o correto talvez por cause do funcionamento de um enum
public String[] getEstadosCivis() {
String[] estados = new String[EstadoCivilEnum.values().length];
for (EstadoCivilEnum estadoEnum : EstadoCivilEnum.values()) {
estados[estadoEnum.ordinal()] = estadoEnum.getEstadoCivil();
}
return estados ;
}
public String[] getEstadosCivis() {
String[] estados = new String[EstadoCivilEnum.values().length];
for (EstadoCivilEnum estadoEnum : EstadoCivilEnum.values()) {
estados[estadoEnum.ordinal()] = estadoEnum.getEstadoCivil();
}
return estados ;
}
[/quote]
Obrigado pela ajuda, mas o problema ainda continua, pois ao rodar isso da nullPointer.
O que eu deveria fazer para esse código não gere o nullPointer? Obrigado.
[quote=Rodrigo Oliveira][quote]
this.clienteController.getCliente().getEstadoCivil().getEstadosCivis())
[/quote]
Esse objeto clienteController seu parece ser o problema… se achar necessario posta esse controller pra gente ver…
Fiz uma forma diferente da sua pra carregar o combo, ele precisa estar no construtor da sua classe;
private void carregaComboEstadoCivil(){
DefaultComboBoxModel comboModel = (DefaultComboBoxModel) comboEstadoCivil.getModel();
comboEstadoCivil.removeAllItems();
for (String estado : getEstadosCivis()) {
comboEstadoCivil.addItem(estado);
}
}
[/quote]
Obrigado pela ajuda novamente, porém sem sucesso, volta a dar NullPointer no caso agora deu no:
for (String estado : clienteController.getCliente().getEstadoCivil().getEstadosCivis()) {
Qto a minha classe ClienteController a unica coisa que fiz nela em questão é criar o objeto Cliente(para não deixar na tela view) que dentro dele tenho um atributo estadoCivil que no caso é a classe Enum.
Por isso o motivo do .clienteController.getCliente().getEstadoCivil().getEstadosCivis()
Foi fazer um teste usando diretamente a classe enum no jComboBox, já te falo o resultado, obrigado.
Ou seja, ao inves de ir pelo objeto, q obviamente era ele que estava null e não a classe Enum (que isso q me confundiu) peguei o valor direto da classe Enum.
No caso nem precisou do código:
private void carregaComboEstadoCivil(){
DefaultComboBoxModel comboModel = (DefaultComboBoxModel) jCBEstadoCivil.getModel();
jCBEstadoCivil.removeAllItems();
for (String estado : EstadoCivilEnum.getEstadosCivis()) {
jCBEstadoCivil.addItem(estado);
}
}
Depois de arrumar todos os meus jComboBox agora me aparece outro problema :shock:
No caso como disse antes tenho um objeto Cliente que tem um atributo EstadoCivil que é uma classe Enum, na hora que vou persistir no banco da esse erro:
java.lang.ClassCastException: java.lang.String cannot be cast to model.cliente.EstadoCivilEnum
Ou seja, como meus jComboBox estão sendo “populados” com as strings do Enum, então na hora de persistir ele não converte string para o valor do enum.
Resolvi o problema porém desse jeito fica muito custoso, se alguém poder me ajudar a pensar em algo mais prático, pois no caso se o ENUM tiver muitas constantes ai complica.
public static EstadoCivilEnum getEnum(String string){
if (string == "Solteiro(a)"){
return SOLTEIRO;
}else if (string == "Casado(a)"){
return CASADO;
}else if (string == "Divorciado(a)"){
return DIVORCIADO;
}
return null;
}
E PS, você está certo. É bem melhor usar objetos de negócio dentro do JCombobox (em enums ou não) do que usar Strings.
Isso evita ter que criar arrays hororrosos para mapeamento, como o que o Rodrigo Oliveira estava sugerindo.