JComboBox, só mostra uma linha

5 respostas
A

Bom dia galera.

Estou com um problema em um formulário aqui.

Tenho dois JComboBox, no FocusLost do primeiro eu executo uma query e preencho o segundo.
Porém quando eu clico pela primeira vez no segundo ele abre pouco, só dá pra ver uma linha, mas se eu clico nele de novo ele abre normalmente.

Uma imagem vale mais do que mil palavras:
[img]http://img813.imageshack.us/img813/7782/erroz.png[/img]

E o código do FocusLost:
private void cbProdutosFocusLost(java.awt.event.FocusEvent evt) {
        // TODO add your handling code here:
        cbFormulas.removeAllItems();

        int codProd = parsearString(cbProdutos.getSelectedItem().toString());

        String sql = "SELECT id || '-' || nome AS idnome FROM formulas, prodform "+
                     "WHERE "+ codProd +" <> produto "+
                     "GROUP BY id, nome ORDER BY id;";

        System.out.println(codProd);

        conFormProd.executarSQL(sql);

        try{
            while(conFormProd.resultset.next()){
                cbFormulas.addItem(conFormProd.resultset.getString("idnome"));
            }
        }
        catch(SQLException ex){
            System.out.println("Erro. "+ex);
        }
    }

5 Respostas

J

Socorro, estou com o mesmo problema, voce já tema a solução?

Grato,

José Neto

andask:
Bom dia galera.

Estou com um problema em um formulário aqui.

Tenho dois JComboBox, no FocusLost do primeiro eu executo uma query e preencho o segundo.
Porém quando eu clico pela primeira vez no segundo ele abre pouco, só dá pra ver uma linha, mas se eu clico nele de novo ele abre normalmente.

Uma imagem vale mais do que mil palavras:
[img]http://img813.imageshack.us/img813/7782/erroz.png[/img]

E o código do FocusLost:
private void cbProdutosFocusLost(java.awt.event.FocusEvent evt) {
        // TODO add your handling code here:
        cbFormulas.removeAllItems();

        int codProd = parsearString(cbProdutos.getSelectedItem().toString());

        String sql = "SELECT id || '-' || nome AS idnome FROM formulas, prodform "+
                     "WHERE "+ codProd +" <> produto "+
                     "GROUP BY id, nome ORDER BY id;";

        System.out.println(codProd);

        conFormProd.executarSQL(sql);

        try{
            while(conFormProd.resultset.next()){
                cbFormulas.addItem(conFormProd.resultset.getString("idnome"));
            }
        }
        catch(SQLException ex){
            System.out.println("Erro. "+ex);
        }
    }
A

Eu troquei para o ItemStateChanged.
Mas aí você tem que colocar uma flag. Pq esse evento é “lançado” 2 vezes.
O que, dependendo da implementação dele, pode deixar seu programa mais lento.

barney

não use SQL Injection

http://www.guj.com.br/posts/list/224716.java

KaosBr

Boa tarde,

Tentem o seguinte:

meuComboBox.setMaximumRowCount(count);

Onde “count”, é igual o numero maximo de linhas a serem exibidas.

[]s

J

Não entendi, desulpe sou iniciante, como coloco essa flag, vou postar meu codigo.

private void jCB_TipoUnidadeArquivamentoItemStateChanged(java.awt.event.ItemEvent evt) {                                                             
            // TODO add your handling code here:
        try {
        listarComboBoxTipoUnidadeArquivamento();
        } catch (SQLException ex) {
            Logger.getLogger(JDialogUnidadeArquivamento.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Voce pode me ajudar a resolver?

Grato

José Neto

andask:
Eu troquei para o ItemStateChanged.
Mas aí você tem que colocar uma flag. Pq esse evento é “lançado” 2 vezes.
O que, dependendo da implementação dele, pode deixar seu programa mais lento.

Criado 29 de novembro de 2010
Ultima resposta 7 de dez. de 2010
Respostas 5
Participantes 4