Inicialmente você estava falando sobre Banco
agora é Usuario
?
Não faz mal, o conceito é o mesmo, tenha em mente que o Swing utiliza MVC ao extremo, quase todos os seus componentes possuem uma interface Model
para fornecer os dados aos compoentes, com o JComboBox
não é diferente, você pode criar o seu próprio ComboBoxModel
para renderizar uma coleção de objetos, isso evita de você ter que ficar fazendo laços para preencher o componente ou acessar o banco diversas vezes.
Hoje você está fazendo um acesso ao banco para preencher o JComboBox
e outro para obter as informações do item selecionado.
Se você criar um ComboBoxModel
, isso é desnecessário.
Imagina que você tem a seguinte classe para representar seus usuários:
public class Usuario {
private int id;
private String nome;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
Você pode então ter uma coleção de objetos do tipo Usuario
, assim:
private List<Usuario> usuarios;
E alimentar essa lista da seguinte forma:
usuarios = new ArrayList<>();
String sql = "select iduser, usuario from tbusuarios ";
PreparedStatement pst = conexao.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
while (rs.next()) {
int id = rs.getInt("iduser");
String nome = rs.getString("usuario");
Usuario usuario = new Usuario();
usuario.setId(id);
usuario.setNome(nome);
usuarios.add(usuario);
}
Tendo um List<Usuario> usuarios
vai facilitar bastante as coisas, agora basta você ter um ComboBoxModel
para renderizar essa lista de usuários:
private class UsuarioComboboxModel extends DefaultComboBoxModel<String> {
/**
* Chamado pelo JComboBox para renderizar o conteúdo da posição informada
*/
@Override
public String getElementAt(int posicao) {
Usuario usuario = usuarios.get(posicao); // obtém o uauário da posição informada
return usuario.getNome(); // renderiza o nome do usuário
}
}
Após preencher sua lista de usuários, basta você setar o modelo do JComboBox
, assim:
cbxusuarios.setModel(new UsuarioComboboxModel());
E para obter as informações do Usuario
selecionado, é só obter o objeto Usuario
correspondente à posição selecionada no JComboBox
, assim:
int posicaoSelecionada = cbxusuarios.getSelectedIndex();
Usuario usuario = usuarios.get(posicaoSelecionada);
txtId.setText(String.valueOf(usuario.getId()));
txtNome.setText(usuario.getNome());