Boa tarde colegas !
Cá estou eu novamente…
Tenho uma classe Cliente, que possui um atributo Status.
No Banco de dados Status é uma coluna que pode ser “A” de Ativo ou “I” de Inativo.
Acontece que na tela quero utilizar um JComboBox onde aparece: A - Ativo e I - Inativo.
Bom inicialmente eu tinha na minha classe cliente um atributo
Strint status;
E na interface eu fazia um if pra transformar “A” em “A - Ativo”.
Dai optei por criar uma classe Status, com 2 atributos:
idStatus (A ou I) e descricao (Ativo ou Inativo).
E na classe cliente troquei de String status para Status status;
Não sei se ficou claro (eu sou péssimo pra explicar)… mas se tiver ficado, isso é o mais certo ?
Seguem os trechos de codigo:
Classe Status:
public class Status implements Serializable {
private String idStatus;
private String descricao;
public Status(String p_id) {
this.idStatus = p_id;
if (p_id.equals("A"))
this.descricao = "Ativo";
else
this.descricao = "Inativo";
}
public String getIdstatus(){
return this.idStatus;
}
public String getIdDescricao(){
return this.descricao;
}
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Status)) {
return false;
}
Status other = (Status)object;
if (this.idStatus != other.idStatus && (this.idStatus == null || !this.idStatus.equals(other.idStatus))) return false;
return true;
}
public String toString() {
return idStatus + " - " + descricao;
}
}
Classe Cliente:
public class Cliente implements Serializable {
@Column(name = "cl_clStatus")
private Status status;
public Status getStatus() {
return this.status;
}
public void setStatus(Status status) {
this.status = status;
}
E agora a parte que esta me deixando incabulado:
Classe CadastroCliente (inteface do usuario)
Carregando o JComboBox com as opções possíveis…
private void carregaCmbStatus() {
cmbStatus.addItem(new Status("A"));
cmbStatus.addItem(new Status("I"));
}
Mostrando no JComboBox o status de um cliente:
private void mostraDados(Cliente cliente) {
cmbStatus.setSelectedItem(cliente.getStatus());
Pegando um status selecionado no combo e passando para um objeto Cliente que depois será persistido:
private void btGravarActionPerformed(java.awt.event.ActionEvent evt) {
clienteTemp.setStatus((Status)cmbStatus.getSelectedItem());
Recuperando os dados de um cliente do banco e que será mostrado na tela:
public Cliente buscarCliente(int idCliente) {
clienteTemp.setStatus(new Status(rs.getString("cl_clStatus")));
Passando o status de um cliente para um prepareStatement que irá atualizar o banco
public void atualizaCliente(Cliente cliente){
stp.setString(12, cliente.getStatus().getIdstatus());
O que me deixou em duvida foi principalmente porque não existe uma tabela Status no banco de dados, porque as opções são somente A ou I, e não devem mudar…
Por outro lado o que me levou a criar uma classe Status é que em outras partes do sistema terei a mesma situação para outras entidades… isso me pareceu ser suficiente para criar a classe ao invés de ficar fazendo:
if (this.status.equals("A")
cmbStatus.setSelectedItem("A - Ativo");
else
cmbStatus.setSelectedItem("I - Ativo");
em cada entidade que tenha o tal do status.
Se alguém puder opinar, fico muito grato !
Abraços a todos.