jComboBox - Apresentar String - Armazernar Char

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.

Crie um objeto… + ou - assim

[code]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());
}
}[/code]

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

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().

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:

[code]
//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);[/code]

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!

[quote=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:

[code]
//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);[/code]

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![/quote]
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.

Hmmm… Entendido, compreendido e anotado!