Estou com uma dúvida.
Tenho um jComboBox que tem apenas Masculino e Feminino, mas eu queria que isto não fosse para o banco de dados, gostaria que fosse ---->>>M - pra masculino e F - Femino, pois o campo do banco é do tipo Char.
Utilizo NetBeans 6.5, existe como resolver este problema.???
Clicando com o diretiro do mouse sobre este componente, vi que existe muita propriedade, mas não encontrei algo desse tipo.
Então é isso gostaria .Que o valor mostrado fosse uma String e fosse para o banco um CHAR.
Me Ajudem por favor, pois parece ser simples, mas estou um trabalhão.
publicfinalclassSexo{publicstaticfinalMASCULINO=newSexo('M');publicstaticfinalFEMININO=newSexo('F');privatestaticfinalStringWRONG_CHAR="O sexo não pode ser diferente de 'F' ou 'M'";publicSexoValueOf(charsexo){if(sexo=='M'||sexo=='m')MASCULINO;elseif(sexo=='F'||sexo=='f')FEMININO;elsethrownewIllegalArgumentException(WRONG_CHAR);}publicSexoValueOf(Stringsexo){if(sexo.toUpperCase.equals("M"));MASCULINO;elseif(sexo.toUpperCase.equals("F"))FEMININO;elsethrownewIllegalArgumentException(WRONG_CHAR);}privatefinalcharsexo;privateSexo(finalcharsexo){if(sexo=='M'||sexo=='m')this.sexo='M';elseif(sexo=='F'||sexo=='f')this.sexo='F';elsethrownewIllegalArgumentException(WRONG_CHAR);}publicchargetSexo(){returnsexo;}publicStringtoString(){return(sexo=='M')?"Masculino":"Feminino";}publicbooleanequals(Objecto){if(oinstanceofCharacter)equals((Character)o);elseif(oinstanceofSexo)equals((Sexo)o);elseif(oinstanceofString)equals((String)o);elsereturnfalse;}publicbooleanequals(Stringo){String.ValueOf(getSexo()).equals(o);}publicbooleanequals(Sexoo){o.getSexo()==getSexo();}publicbooleanequals(Charactero){o.equals(getSexo());}}
use ele no seu combo.... ele vai mostrar no combo "Masculino" quando o valor for 'M' e feminino qunado for 'F' ...
e através de getSexo() vc consegue pegar o char e salvar no banco
vc pode pegar o objeto diretamente assim.... Sexo.FEMININO ou Sexo.MASCULINO
M
marcobiscaro2112
Ou ainda pode usar um Enum (versão 1.6+):
publicenumSexo{MASCULINO('M',"Masculino"),FEMININO('F',"Feminino");privatecharcurto;privateStringcompleto;privateSexo(charcurto,Stringcompleto){this.curto=curto;this.completo=completo;}@OverridepublicStringtoString(){returncompleto;}publicchartoChar(){returncurto;}publicstaticSexogetSexo(charc){for(Sexos:Sexo.values()){if(s.toChar()==Character.toLowerCase(c)||s.toChar()==Character.toUpperCase(c)){returns;}}thrownewIllegalArgumentException("O sexo não existe.");}publicstaticSexogetSexo(Stringsexo){for(Sexos:Sexo.values()){if(s.toString().equalsIgnoreCase(sexo)){returns;}}thrownewIllegalArgumentException("O sexo não existe.");}}
Você pode acessar os sexos através da chamada:
Sexo.MASCULINO;// ouSexo.FEMININO;
E com os métodos getSexo você pode pegar um sexo pelo char que o representa ou pelo seu nome completo. Por exemplo:
Sexos=Sexo.getSexo('M');// retorna masculinoSexos2=Sexo.getSexo("feminino");// retorna femininoSexos3=Sexo.getSexo('U');// lança um IllegalArgumentException
Você pode facilmente adicionar esses objeto em um JComboBox, uma vez que basta adicioná-los e o método toString() será chamado para a representação (ou seja, aparecerá o nome legível) e pode resgatar o char correspondente através do método getChar().
dfmartins
Dá pra fazer mais simples também. Simplesmente vc pega a String ("Masculino" ou "Feminino"), converte ela para um array de char e pega somente o primeiro caractere ('M' ou 'F'). Segue o código:
//array de char temporáriochartemp[]=newchar[1];//declaração de String para testeStringsexo="Masculino";//transforma String em array de charsexo.getChars(0,1,temp,0);//pega somente o primeiro char que é o que interessacharbancoDados=temp[0];//exibe o resultado no consoleSystem.out.println(bancoDados);//Teste com outro valor de String:sexo="Feminino";sexo.getChars(0,1,temp,0);bancoDados=temp[0];System.out.println(bancoDados);
Saída no console:
M
F
Daí na tua aplicação tu usa String sexo = combo.getText(); pra retornar o valor selecionado pelo usuário.
Espero ter ajudado.
Abraço!
M
marcobiscaro2112
dfmartins:
Dá pra fazer mais simples também. Simplesmente vc pega a String ("Masculino" ou "Feminino"), converte ela para um array de char e pega somente o primeiro caractere ('M' ou 'F'). Segue o código:
//array de char temporáriochartemp[]=newchar[1];//declaração de String para testeStringsexo="Masculino";//transforma String em array de charsexo.getChars(0,1,temp,0);//pega somente o primeiro char que é o que interessacharbancoDados=temp[0];//exibe o resultado no consoleSystem.out.println(bancoDados);//Teste com outro valor de String:sexo="Feminino";sexo.getChars(0,1,temp,0);bancoDados=temp[0];System.out.println(bancoDados);
Saída no console:
M
F
Daí na tua aplicação tu usa String sexo = combo.getText(); pra retornar o valor selecionado pelo usuário.
Espero ter ajudado.
Abraço!
Bom... se é só pra pegar a primeira letra basta usar o charAt(0) e resolvido. A forma apresentada é no caso de ele querer ter objetos que representam ambos os sexos e que possam ser adicionados a componentes Swing.