У меня есть этот метод, который заполняет мои поля со списком:
public DefaultComboBoxModel llenarComboFamilia() throws SQLException {
String query = "select * from familias";
DefaultComboBoxModel df = new DefaultComboBoxModel();
abrirConexion();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
//df.addElement(rs.getObject("This is the ID I need"));
df.addElement(rs.getString("String from DB"));
}
cerrarConexion();
return df;
}
Затем я загружаю его:
jComboBox2.setModel(con.llenarComboFamilia());
И когда я нажимаю кнопку "Зарегистрироваться", у меня есть:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
Persona p = new Persona(jTextField7.getText(), 1,
jComboBox2.getSelectedIndex() + 1,
jTextField5.getText(), jTextField6.getText());
con.insertarPersonasProp(p);
}
Но jComboBox2.getSelectedIndex() + 1
не работает для меня, потому что мне нужно значение ID из базы данных, а не выбранный индекс.
Есть идеи?
вы можете использовать Vector для хранения идентификаторов. просто добавьте вектор с идентификатором каждого элемента при добавлении элемента в поле со списком. Вектор и combobox будут иметь одинаковое количество элементов, поэтому идентификатор элемента 10 в combobox будет элементом 10 в векторе. то вы можете получить идентификатор элемента, выбранного в данный момент в combobox из вектора, например vectorIDs.get(jComboBox2.getSelectedIndex())
Создайте пользовательский объект, содержащий как поля "Id", так и "Description" из вашего SQL-запроса. Затем вы добавляете этот объект в combobox и используете собственный рендерер.
Дополнительную информацию и пример кода см. В Combo Box с Custom Renderer.