GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

[RESOLVIDO!] Pegar ID do item selecionado no JCombobox

#1

Boa tarde, alguém poderia me dar uma ajuda criei um JCombobox que tras do banco de dados
os bancos cadastrados ex: santander, banco do brasil.
eu preciso que ao selecionar um banco, o id desse banco seja setado, em um textfield .

esse é meu metodo que traz os bancos cadastrados para o JCombobox, como eu pego agora o id desse banco selecionado no combobox.
Agradeço muito a ajuda se possível bem detalhada porque sou novato na área .

private void cbxbancos (){
      
    try {
        String sql = "select * from bancos ";
        pst = conexao.prepareStatement(sql);
        rs = pst.executeQuery();
        while (rs.next()) {

            String nombanco = rs.getString("nombanco");

            cbxbanco.addItem(nombanco);

        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }
}
0 Likes

#2

Já criou uma classe Banco com os atributos id e nome?

Se não criou, crie e alimente uma coleção com os objetos do tipo Banco, depois fica mais fácil.

0 Likes

#3

Eu não tinha criado estou criando agora depois de criar o que eu faço?

0 Likes

#4

Você ja tem o código. É só fazer isso:

seu_campo.setText(rs.getInt("id_banco"));

Como o Staroski disse, é mais simples se vc usar uma classe com os objetos do tipo banco, quando for puxar, dá menos dor de cabeça.

0 Likes

#5

Deu para pegar o id, porem pega o primeiro id cadastrado, e quando eu escolho no combobox
um outro banco, o id continua o mesmo, eu preciso que venha o id do banco selecionado.

0 Likes

#6

Você chama esse método quando o JFframe inicia? Se sim, faz um método que seja executado a cada vez que você selecionar algum item. (Usa esse evento: ItemStateChanged). Se você usa o Netbeans, é só clicar em cima do combo, botão direito, evento, ItemState (eu acho), e o Changed.

0 Likes

#7

eu uso o netbeans , o método é chamado ao iniciar sim, e agora qual codigo devo colocar no evento para que ao selecionar o banco do brasil trazer o id do banco do brasil?

0 Likes

#8

Você já tem o código rapaz.

0 Likes

#9

ainda assim não consigo fazer funcionar, o id esta vindo fixo do banco de dados e não muda quando eu mudo o banco no combobox, está muito dificil para mim solucionar esse problema

0 Likes

#10

Você já tem uma lista de objetos do tipo Banco?
Criou um ComboBoxModel pra renderizar essa lista?

0 Likes

#11

eu criei uma classe com os campos da tabela do banco de dados, mas não sei como fazer agora para que o combobox receba esse usuário e set e id do usuário.
Obs. aqui estou fazendo em outro projeto o projeto do banco referente a primeira pergunta está em uma maquina não acessível no momento, ai estou fazendo com outro projeto que se der certo aqui eu replicar lá. desde já agradeço muito a ajuda de vocês

esse é o metodo.
public Jcombobox() {
initComponents();
conexao = ModuloConexao.conector();
comboboxusuarios();

}
private void comboboxusuarios (){
  
try {
    String sql = "select * from tbusuarios ";
    pst = conexao.prepareStatement(sql);
    rs = pst.executeQuery();
    while (rs.next()) {
        
        
        int iduser = rs.getInt("iduser");
        String usuario = rs.getString("usuario");
       
        cbxusuarios.addItem(usuario);
       txtid.setText(rs.getString("iduser"));

    }
} catch (Exception e) {
    JOptionPane.showMessageDialog(null, e);
}

}

E essa a classe.
public class Combousuarios {

private int iduser;
private String usuario;
private String login;
private String perfil;

public int getIduser() {
    return iduser;
}

public void setIduser(int iduser) {
    this.iduser = iduser;
}

public String getUsuario() {
    return usuario;
}

public void setUsuario(String usuario) {
    this.usuario = usuario;
}

public String getLogin() {
    return login;
}

public void setLogin(String login) {
    this.login = login;
}

public String getPerfil() {
    return perfil;
}

public void setPerfil(String perfil) {
    this.perfil = perfil;
}

}

0 Likes

#12

Pessoal consegui resolver so agora depois de muito trabalho (pesquisa) eu fiz assim criei dois métodos mostrados abaixo. obrigado aos dois que ajudaram!

public Jcombobox() {
initComponents();
conexao = ModuloConexao.conector();
//aqui eu chamei os dois metodos primeiro o metodo que preenche a combobox
// depois fui na janela onde tem o combobox e as caixas de texto e criei um evento na chanela mouse entered chamando o metodo que traz o id para o campo texto comboid();
comboboxusuarios();
comboid();

   esse método trás os usuários do banco de dados! 
}
private void comboboxusuarios (){
  
     try {
String sql = "select * from tbusuarios ";
pst = conexao.prepareStatement(sql);
rs = pst.executeQuery();
while (rs.next()) {
    
    
   // int iduser = rs.getInt("iduser");
    String usuario = rs.getString("usuario");
   
    cbxusuarios.addItem(usuario);
   //txtid.setText(rs.getString("iduser"));
   
}

} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}

Esse metodo tras o id do isuario selecionado no combobox.
}
private void comboid (){

     try {
String sql = "SELECT iduser FROM tbusuarios WHERE usuario='" + cbxusuarios.getSelectedItem().toString()+"'";
pst = conexao.prepareStatement(sql);
rs = pst.executeQuery();
while (rs.next()) {
    
    
    int iduser = rs.getInt("iduser");
    //String usuario = rs.getString("usuario");
   
   // cbxusuarios.addItem(usuario);
   txtid.setText(rs.getString("iduser"));
   
}

} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}

0 Likes

#13

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