Preencher JComboBox com banco de Dados Atribuído ID no Index

6 respostas
javamysqlphp
W

Ola,
alguém pode me ajudar com Preenchimento de JcomboBox com Banco de dados.
eu Faço um Select e Add o Intem do JcomboBox
Porem o Index dele Segue uma Sequencia
0 , 1 , 2, 4,

e no meu banco de dados esse JcomboBox deve ser preenchido só com determinados Registro
e o index do meu JcomboBox deve Ser o ID do meu Registro do banco
Não conseguir seta o index desse modo

Metodo de popular o JcomboBox

private void sistema(){

Connection conexao = Conexao.getConnection();

PreparedStatement pst;

ResultSet rs;
String sql = " SELECT * FROM SISTEMA WHERE SITUACAO = 1 ";
    try {
        pst = conexao.prepareStatement(sql);
        rs = pst.executeQuery();
        while(rs.next()){
            cmbSistema.addItem(rs.getString("ID") + "  " + rs.getString("NOME"));
               String a = String.valueOf(rs.getString("ID"));
            
        }
        conexao.close();
    } catch (Exception ex) {
    }
}

6 Respostas

T

Jovem para que você ta pegando o valor do ID nessa variável “a” do tipo String? Tente usar o método “.addItemIndex()” para adicionar os indexes. Porém acredito que será necessário passar um valor do tipo inteiro (caso for, pode ser solucionado através do Integer.parseInt()). Notei também que sua ID no banco é do tipo String, aconselho usar do tipo Inteiro, mais convencional.

W

Tanto faz o Retorno do ResultSet
coloquei como Int
e esse Seu Metodo ".addItemIndex()"
não tem para JcomboBox
cmbSistema.addItem(rs.getInt(“ID”) + " " + rs.getString(“NOME”));

não funcionou

W

o que eu quero é que o Index do JcomoboBox seja o ID do meu Registro ( Exemple Index 10 Item ERP ) e não a Sequencia padrão dele de 1 ,2 3… porque Quando usar o Método cmbSistema.getSelectedIndex(); irei usar esse Index Para incluir um Registro e um nova Tabela do banco de dados então pega o ID do Sistema Selecionado é muito Importante

T

Acho que estranho você querer colocar todas essas informações no ID, uma vez que o ID (caso tenha utilizado como chave primaria serve exatamente para referenciar as informações). Vou olhar o método certinho quando chegar em casa e lhe informo. Lembrando que seu ID, fica composto por nº do item e nome, não sei para qual fim quer isso, somente para inserção em outra tabela? Porque para uma pesquisa futura, por exemplo, caso precise em sua aplicação, além de referencia o ID ainda terá de referenciar o nome juntamente, nada convencional.

W

fiz um paliativo até conseguir pega minha iD

na imagem eu add no Item o ID do registro e seleciono o item quando Selecionado lá no Jcomobo…
com o Split pego só o ID
olha o código Abaixo da ação do JcomoboBox

private void cmbSistemaActionPerformed(java.awt.event.ActionEvent evt) {                                           

    sistema = 0;
    if(cmbSistema.getSelectedIndex()!= 0){
        String a =  (String) cmbSistema.getSelectedItem();
        String[] recebe = a.split(" ");
        sistema = Integer.parseInt(recebe[0]);
    }
  
}
J

Ola @wenderson.souzza, segue um exemplo melhor e mais usual:

class ExemploDTO{
   private Long id;
   private String descricao;
  //setter e getter

   public String toString(){ return descrição}
  }


  comboBox.setRenderer(new ListCellRenderer(){
   DefaultListCellRenderer renderer= new         DefaultListCellRender ();
   @Override public Component getListCellRendererComponent(      JList list,      Object value,      int index,      boolean isSelected,      boolean cellHasFocus){

  If(value instanceof ExemploDTO){
    ExemploDTO ex=(ExemploDTO)value;
    return renderer.getListCellRendererComponent(list,ex.getDescricao(),index,isSelected,cellHasFocus);
  }else {
    return renderer.getListCellRendererComponent(list,value.toString(),index,isSelected,cellHasFocus);
  }
  
}
);

Dai qndo VC quiser pegar o objeto

ExemploDTO ex=(ExemploaDTO)combobox.getSelectedItem();
 //só cuidado qndo for o item "selecione" que eh string

E na hora de adicionar , adiciona o objeto

Criado 28 de junho de 2016
Ultima resposta 30 de jun. de 2016
Respostas 6
Participantes 3