jComboBox - Apresentar String - Armazernar Char

5 respostas
flaviorgiron

Bom dia a todos.

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.

Desde Já agradeço.

5 Respostas

Lavieri

Crie um objeto.... + ou - assim

public final class Sexo {
   public static final MASCULINO = new Sexo('M');
   public static final FEMININO = new Sexo('F');
   private static final String WRONG_CHAR  = "O sexo não pode ser diferente de 'F' ou 'M'";

   public Sexo ValueOf(char sexo) {
       if (sexo == 'M' || sexo =='m')
             MASCULINO;
       else if (sexo == 'F' || sexo =='f')
             FEMININO;
       else
              throw new IllegalArgumentException(WRONG_CHAR);
   }

   public Sexo ValueOf(String sexo) {
       if (sexo.toUpperCase.equals("M"));
             MASCULINO;
       else if (sexo.toUpperCase.equals("F"))
             FEMININO;
       else
              throw new IllegalArgumentException(WRONG_CHAR);
   }

   private final char sexo;
   
   private Sexo(final char sexo) {
       if (sexo == 'M' || sexo =='m')
              this.sexo = 'M';
       else if (sexo == 'F' || sexo =='f')
              this.sexo = 'F';
       else
              throw new IllegalArgumentException(WRONG_CHAR);
   }
   
   public char getSexo() {
      return sexo;
   }
   
   public String toString() {
      return (sexo == 'M') ? "Masculino" : "Feminino";
   }
   
   public boolean equals(Object o) {
       if (o instanceof Character)
           equals((Character)o);
       else if(o instanceof Sexo)
           equals((Sexo)o);
       else if(o instanceof String)
           equals((String)o);
       else
           return false;
   }
   
   public boolean equals(String o) {
         String.ValueOf(getSexo()).equals(o);
   }
   public boolean equals(Sexo o) {
         o.getSexo() == getSexo();
   }
   public boolean equals(Character o) {
         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

Ou ainda pode usar um Enum (versão 1.6+):

public enum Sexo {

	MASCULINO('M', "Masculino"), FEMININO('F', "Feminino");

	private char curto;
	private String completo;

	private Sexo(char curto, String completo) {
		this.curto = curto;
		this.completo = completo;
	}

	@Override
	public String toString() {
		return completo;
	}

	public char toChar() {
		return curto;
	}

	public static Sexo getSexo(char c) {
		for (Sexo s : Sexo.values()) {
			if (s.toChar() == Character.toLowerCase(c)
					|| s.toChar() == Character.toUpperCase(c)) {
				return s;
			}
		}
		throw new IllegalArgumentException("O sexo não existe.");
	}

	public static Sexo getSexo(String sexo) {
		for (Sexo s : Sexo.values()) {
			if (s.toString().equalsIgnoreCase(sexo)) {
				return s;
			}
		}
		throw new IllegalArgumentException("O sexo não existe.");
	}

}

Você pode acessar os sexos através da chamada:

Sexo.MASCULINO;
// ou
Sexo.FEMININO;

E com os métodos getSexo você pode pegar um sexo pelo char que o representa ou pelo seu nome completo. Por exemplo:

Sexo s = Sexo.getSexo('M'); // retorna masculino
Sexo s2 = Sexo.getSexo("feminino"); // retorna feminino
Sexo s3 = 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ário
		char temp[] = new char[1];
		//declaração de String para teste
		String sexo = "Masculino";
		//transforma String em array de char
		sexo.getChars(0, 1, temp, 0);
		//pega somente o primeiro char que é o que interessa
		char bancoDados = temp[0];
		//exibe o resultado no console
		System.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
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ário
		char temp[] = new char[1];
		//declaração de String para teste
		String sexo = "Masculino";
		//transforma String em array de char
		sexo.getChars(0, 1, temp, 0);
		//pega somente o primeiro char que é o que interessa
		char bancoDados = temp[0];
		//exibe o resultado no console
		System.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.
dfmartins

Hmmm… Entendido, compreendido e anotado!

Criado 18 de fevereiro de 2009
Ultima resposta 18 de fev. de 2009
Respostas 5
Participantes 4