Galera é o seguinte:
Tenho as tabelas referentes a marcas e modelos de carros e dois jcomboBox’s,
MARCAS
idMarca
nome
MODELOS
idModelo
idmarca
nome
CARROS
idCarros
placa
idMarca
idModelo
Quando seleciono alguma marca no cbxMarcas, os modelos correspondentes aquela marca aparecem no outro cbxModelos. Dai clico no botão gravar da tabela carros e ERA para dar certo.
o problema é que preciso gravar na tabela carros o idModelo e o idMarca que são numeros.
acredito que poderia ser algo parecido com a linha abaixo do delphi
DBLookupComboBox.DataSource.DataSet.FieldByName(DBLookupComboBox.KeyField).Value
COMO PEGO O ESSE ID’S DO JCOMBOBOX do java?
procurei e não achei algo parecido com esse opção “keyField” no netbeans.
Dependendo de como você está montando o combobox.
Provavelmente, você cria uma lista e, a partir dela, popula o combo.
Então, eu sugiro obter o selectedIndex e ir até a lista, identificar qual o elemento e obter seu id.
Estou populando com esses metodos:
METODOS DA CAMADA DAO:
public String[] preencherMarcas(String[] vetorMarcas) {
String sql = “select * from marcas”;
int i = 0;
try {
pst = conexao.prepareStatement(sql);
rs = pst.executeQuery();
if (rs.next()) {
do {
vetorMarcas[i] = rs.getString(“nome”).toString();
i++;
} while (rs.next());
}
// conexao.close();
return vetorMarcas;
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
return null;
}
public String[] preencherModelos(String[] vetorModelos, int id) {
String sql = "select * from modelos where idmarca = ?";
int i = 0;
try {
pst = conexao.prepareStatement(sql);
pst.setInt(1, id);
rs = pst.executeQuery();
if (rs.next()) {
do {
vetorModelos[i] = rs.getString("nome").toString();
i++;
} while (rs.next());
}
// conexao.close();
return vetorModelos;
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
return null;
}
METODOS DA CAMADA VISAO
public void preencherMarcas(){
String[] vetorMarcas = new String[4];
controle.preencherMarcas(vetorMarcas);
jComboBox1.removeAllItems();
for (int i = 0; i < vetorMarcas.length; i++)
jComboBox1.addItem(vetorMarcas[i]);
}
public void preencherModelos(){
String[] vetorModelos = new String[8];
controle.preencherModelos(vetorModelos, jComboBox1.getSelectedIndex()+1);
jComboBox2.removeAllItems();
for (int i = 0; i < vetorModelos.length; i++)
jComboBox2.addItem(vetorModelos[i]);
}
Eu até usei selectedIndex(), mas o ID(ou index) capturado corresponde a posição no jcombobox e não ao id da tabela.
E a posição retornada pelo selectedIndex se refere, pasme, a mesma posição do objeto no vetor que popula, no caso, o tal do vetorModelos…
O problema é que você criou um vetor de String. Se fosse um vetor de objetos, seria mais fácil.
Essa posição que vc falou ai não bate quando é alterada a marca.
por exemplo:
tenho a marca GM(id=1) - modelos onix(id =1) e cruze(id=2) e
ford(id=2) - modelos fusion(id=3) e fiesta(id=4)
quando escolho por exemplo GM - CRUZE, vão ser gravado no BD os valores 1(gm) e 2(cruze). correto
mas se eu troca pra FORD(2) - FIESTA (4), vão ser gravados no BD os valores 2(ford) e 2(fiesta), grava o 2 errado ao invés do 4, pq o fiesta ficou na posição 2 do Jcbx, e eh essa posição que o selectedIndex() pega.
Então, é justamente por isso que eu disse que
Você deveria recuperar os objetos que correspondem ao que você quer, uma vez que o JComboBox permit que você defina o tipo ao qual ele pertence
JComboBox<Pessoa> cbxPessoas = new JComboBox<Pessoa>();