Olá de novo!
Bem, estou com um problema com um combo box. Eu tenho um JFrame de cadastro de Medicamento, que busca o Tipo do medicamento e a Marca do medicamento.
Eu consigo listar os dados (como texto) e seleciona-los e até salva-los (como int), mas através de uma enorme gambiarra e que arrumar isso.
public CadastroMedicamento() throws SQLException{
initComponents();
comboTipo.removeAllItems(); //remove os itens atuais do comboBox.
//comboTipo.insertItemAt("", 0); //insere linha em branco - solução 1 para começar a contagem em 1
ArrayList tipos = new MedicamentoDAO().findMedTipos(); //'medicamentoDAO' é meu objeto que retorna os produtos do banco.
Iterator i = tipos.iterator();
while (i.hasNext()) {
comboTipo.addItem(String.valueOf(i.next())); //adiciona itens na box
}
comboMarca.removeAllItems(); //remove os itens atuais do comboBox.
//comboMarca.insertItemAt("", 0);
ArrayList marcas = new MedicamentoDAO().findMedMarcas(); //'produtoDAO' é meu objeto que retorna os produtos do banco.
Iterator i2 = marcas.iterator();
while (i2.hasNext()) {
comboMarca.addItem(String.valueOf(i2.next()));
}
}
private void onClickSalvar() throws ParseException, SQLException{
MedicamentoController mc = new MedicamentoController();
int tipo = comboTipo.getSelectedIndex();
int marca = comboMarca.getSelectedIndex();
try {
//inicio da gambirra
if (comboTipo.getSelectedIndex() >= 0){ //se estiver selecionado
tipo = tipo + 1; //pela o indice + 1, pois getSelectedItenm começa a contar de 0
} if (comboMarca.getSelectedIndex() >= 0){
marca = marca + 1;
} if (txtFaixaEtariaInicio.getText().isEmpty()){
txtFaixaEtariaInicio.setText("0");
} if (txtFaixaEtariaFim.getText().isEmpty()){
txtFaixaEtariaFim.setText("0");
}
mc.salvar(/**Integer.parseInt(jTextFieldCodigoTipo.getText()),*/ txtNomeMedicamento.getText(), tipo,
marca, sexo, faixaEtaria,
Integer.parseInt(txtFaixaEtariaInicio.getText()), Integer.parseInt(txtFaixaEtariaFim.getText()), periodoValido,
formPeriodoValidoInicio.getText(), formPeriodoValidoFim.getText());
JOptionPane.showMessageDialog(this, "Medicamento salvo com sucesso!");
dispose();
//clearFields();
} catch (SQLException e) {
JOptionPane.showMessageDialog(this, "Nao foi possivel salvar contato!\n" + e.getLocalizedMessage());
}
}
public ArrayList findMedTipos() throws SQLException {
String select = "SELECT codigotipo, nometipo FROM tipomedicamento ORDER BY codigotipo"; //sql
PreparedStatement stmt = getConnection().prepareStatement(select);
ResultSet rs = stmt.executeQuery();
ArrayList list = new ArrayList();
while (rs.next()) {
//list.add(rs.getString(1));
list.add(rs.getString(2)); //mando a box exibir o nome e não o código
}
return list;
}
public ArrayList findMedMarcas() throws SQLException {
String select = "SELECT codigomarca, nomemarca FROM marca ORDER BY codigomarca"; //sql
PreparedStatement stmt = getConnection().prepareStatement(select);
ResultSet rs = stmt.executeQuery();
ArrayList list = new ArrayList();
while (rs.next()) {
//list.add(rs.getString(1));
list.add(rs.getString(2)); //exibe nomemarca
}
return list;
}
Tá, até ai tudo bem... salva tudo bonitinho e tal, mas o problema é: Se o usuário, por exemplo, excluir o tipo que tem como código 2 no banco, o combo vai exibir o tipo 3 como se fosse o 2 e vai salvar errado, gerando um enorme erro.
Eu quero achar uma solução que me faça salvar o código que fica no banco mesmo e não o indice, ou seja, que não use o getSelectedIndex.
Alguém tem uma idéia do que pode ser feito pra arrumar isso?
