[Resolvido] JComboBox e KeyPressed, não mostra a popup

4 respostas
Fabio_Baptista

Ola pessoal,

estou tendo um problema com a reescrita de KeyPressed do JCombobox em modo editável, segue o código:

public class TesteJCombobox extends javax.swing.JPanel {

    public TesteJCombobox() {
        initComponents();
        jComboBox1.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if (jComboBox1.isPopupVisible() == false) {
                    if (e.getKeyCode()==KeyEvent.VK_ENTER) {
                        String[] nomes = new String[] { "Andre", "Fábio", "Guilherme", "João" };
                        jComboBox1.setModel(new DefaultComboBoxModel(nomes));
                        jComboBox1.setPopupVisible(true);
                    }
                }
            }
        });
    }

o que ocorre é que quando teclo ENTER e efetuo o filtro no model, gostaria que isPopVisible fosse TRUE para apresentar o resultado, mas ela não está abrindo.

a verificação para ver se ela está visivel ou não é para não pegar o ENTER do usuário quando ele escolhe uma das opções da lista.

alguém tem um dica ou uma ideia melhor pra implemntar isso, valeu!

Fábio

4 Respostas

thundercas

Fabio, tente o seguinte:

if (jComboBox1.getSelectedIndex() > 0) {
     jComboBox1.setPopupVisible(false);
}

Não testei isso e nem consultei API pq aqui nao tenho JAVA, mas faz um teste aih… se nao for exatamente isso, eh algo bem parecido…

abs

Fabio_Baptista

e ai thundercas,

cara não entendi direito o que fazer? vc me indicou verificar se existe item selecionado correto?

Talvez não tenha me explicado direito, na verdade o que preciso é que quando a popup do Jcombobox estiver fechada a tecla enter sirva como disparo para popular o JCbx, assim que ele for preenchido que a popup apareceça para o usuário selecionar um opção.

Mas quando ele selecionar uma opção clicando ENTER, o KeyListener verifica que é uma esclha e não popula o combobox novamente,

Sobrescrevendo KeyRelease, consigo esse efeito e após digitar um nome dentro do Combobox e clicar ENTER a popup abre normamente com as opções, so que quando seleciono uma opção na lista usando o ENTER ele também refaz a pesquisa e preenche novamente o Combobox, e é isso que não quero que aconteça.

mas vou tentar implantar usando o KeyReleased e ao invez de verificar com isPopupVisible() vou ver se é maior que zero, mão na massa…

Se tiver uma outra dica é bem vinda… talvez eu não esteja utilizando os eventos corretos para implantar isso.

Valeu cara!

Fabio_Baptista

rolou cara…

@Override
                public void keyReleased(KeyEvent e) {
                 if (jComboBox1.getSelectedIndex() <= 0) {
                    if (e.getKeyCode()==KeyEvent.VK_ENTER) {
                        String[] nomes = new String[] { "Andre", "Fábio", "Guilherme", "João" };
                        jComboBox1.setModel(new DefaultComboBoxModel(nomes));
                        jComboBox1.setPopupVisible(true);
                    }
                }
            }
        });

a unica coisa é que depois que ele está preenchido pra abirir a lista só com down ou clicando na seta, mas já ficou melhor do que estava… mais uns ajustes e acho que blz…

obrigado de novo!

flaviorgiron

Olá Fábio Baptista.

Gostaria de dizer que seu post foi muito util para a resolução de um problema que deparei hoje e graças a solução que postou tive uma solução rápida para o meu problema.
Aproveitando o momento e infelizmente ressuscitando um tópico tão antigo, gostaria de lhe apesar o seguinte problema, talvez sua experiencia possa me ajudar.

Estou utilizando um jComboBox no meu desenvolvimento Desktop, e carrego uma lista de objetos para o mesmo.
Porém preciso deixar este combo box editável para que o usuário possa informar valores nele. Mais quando utilizo o renderer abaixo não esta funcionando pois ao selecionar um item no combo editável ele perde o renderer.

Volta a ficar assim
"br.com.gestaoempresario.model.Parametros[ idParametro=1 ]"

RENDERER

public class ParametroListCellRenderer extends DefaultListCellRenderer {    
        
        @Override    
        public Component getListCellRendererComponent(    
                JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {    
            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);    
            if (value instanceof Parametros) {    
                Parametros p = (Parametros) value;    
                setText(p.getDescricao());    
           }    
           return this;    
       }    
   }

Ficarei muito grato caso possa me auxiliar neste problema ou alguem que esteja lendo este post, pois o problema estou a dias sem solução.

Forte Abraço a todos.

Criado 30 de dezembro de 2008
Ultima resposta 16 de jun. de 2011
Respostas 4
Participantes 3