Pega ID de um campo pelo JcomboBox

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