Problema com combobox

13 respostas
T

Preciso de um combo editavel que a cada caractere digitado o programa receba esse valor e armazene-o em uma variavel.
Não estou conseguindo utilizar o evento KeyReleased() no combobox.
Consegui fazer com Jtextfield mas no meu caso tem que ser combobox mesmo.
Por favor me ajudem.

13 Respostas

ViniGodoy

Oi. Seja bem-vindo ao GUJ.
Por favor, não crie tópicos com letras maiúsculas. Na internet, geralmente usamos maiúsculas para representar um grito. :wink:

Tenho uma dúvida, por que você precisa fazer isso letra-a-letra?

T

Desculpe , nao foi de proposito não!
Digitei o titulo do topico por ultimo e a tecla caps loock estava ativada.
Não tinha reparado por que digitei ás pressas.

Mas o conteudo ainda é valido !
Se puderem ajudar eu fico grato!!! :wink:

P

ViniGodoy:
Oi. Seja bem-vindo ao GUJ.
Por favor, não crie tópicos com letras maiúsculas. Na internet, geralmente usamos maiúsculas para representar um grito. :wink:

Tenho uma dúvida, por que você precisa fazer isso letra-a-letra?

Ao que me parece ele deve estar tentando fazer um auto-sugest. Seria isso tarsis ?

RenataFA

tarsis, vc não está conseguindo utilizar o keyReleased() pq vc está adicionando o keyListener ao combo, mas não é no combo que vc tem que adicioná-lo.

Qdo vc está usando um combo “editável”, vc na verdade está editando um componente que está dentro do seu combo.

Faça assim:

((JTextField)seuCombo.getEditor().getEditorComponent()).addKeyListener(seuListener);

Agora programe o que deseja nos métodos do seu keyListener e pronto, ele vai funcionar. :wink:

ViniGodoy

Se você quer fazer um AutoComplete, eu sugiro que dê uma pesquisada na classe AutoCompleteDecorator do SwingX. Ela já faz isso para você e funciona tanto para combox editáveis quanto não editáveis. Poupa muito trabalho…

Dá uma olhada no site dos caras: http://swinglabs.org/

T

Eu acho que é isso mesmo Renata,mas como ficaria o codigo completo?

So pra exemplificar ,pode ser assim:
a cada caractere digitado o programa va mostrando num textField o que estiver contido no combobox.
so pra testar o evento!!

RenataFA

Primeiro crie seus dois objetos, o Combo e o TextField:

javax.swing.JComboBox jComboBox1 = new javax.swing.JComboBox();
javax.swing.JTextField jTextField1 = new javax.swing.JTextField();

jComboBox1.setEditable(true);
((JTextField)jComboBox1.getEditor().getEditorComponent()).addKeyListener(listener); // adicionei o listener

jTextField1.setText("");

Depois, na classe listener que vc criar (KeyListener), vc programa o método abaixo:

public void keyReleased(KeyEvent arg0) {
	jTextField1.setText(((JTextField)jComboBox1.getEditor().getEditorComponent()).getText());
}
Testei aqui e funcionou legal. Agora é com vc! :wink:
T

estou utilizando o netbeans , e ainda nao sei criar os componentes diretamente em codigo.
Eu adiciono os componentes pela aba swing arrastando e soltando e o netBeans gera o codigo de criação do componente escolhido.
Justamente esse código onde deveria adicionar o

jComboBox1.setEditable(true);   

// ond deveria adicionar o codigo abaixo fica bloqueado
((JTextField)jComboBox1.getEditor().getEditorComponent()).addKeyListener(listener);

é bloqueado pelo netBeans para nao serem feitas alteraçoes.

T

afhh Consegui fazer o evento funcionar, tive que ir na pasta src ond ficam os fontes .
Quanto ao evento ja ta tudo ok.

porem ainda não consegui armazenar o que foi digitado em uma variavel.

Esta dando o seguinte erro :
incompatible types
found : javax.swing.JTextField
Required : java.lang.String

Abaixo o codigo:

String m = ((JTextField)jComboBox1.getEditor().getEditorComponent()).getText();
System.out.println(m);

obs:: o objetivo de armazenar numa variavel é pq usarei p fazer consultas ao banco::
mas isso nao precisa ser colocado no exemplo.

RenataFA

Amigo, tem certeza de que o erro é esse?

Não está fazendo muito sentido, afinal, o getText() de um JTextField retorna uma String. Não compreendo pq ele está dando essa msg se seu código estiver igual ao que postou.

T

eu consegui da seguinte forma:

String m = (string) jComboBox1.getEditor().getItem(); 
System.out.println(m);
T

Dei uma pesquisada sobre o swingX e acho que era mais ou menos isso que estava precisando um autocomplete!!
Mas ainda tenho que baixar a biblioteca e ver como implementar isso.

valew pela ajuda.
Provavelmente voltarei a postar neste topico . Em caso de duvida sobre o assunto!

Thanks!!

root_

Bom, se o comboBox estiver com setEditable(true); a melhor forma, pelo q eu acho seria:

jComboBox1.getEditor().getEditorComponent().addKeyListener
    (
        new KeyListener() 
        {
          public void keyTyped(KeyEvent keyEvent) {}

          public void keyPressed(KeyEvent keyEvent) {}

          public void keyReleased(KeyEvent keyEvent) {
            jComboBox1.getEditor().setItem
                (jComboBox1.getEditor().getItem().toString().toUpperCase());
          }      
        }
    );

Nesse meu caso, estou fazendo com que tudo que seja digitado, fique com caixa alta(Tudas letras Maiusculas).

  • uma forma diferente de agregar os enventos de Keys no componente de Ediçao do ComboBox…

T mais!

Criado 28 de novembro de 2007
Ultima resposta 13 de ago. de 2008
Respostas 13
Participantes 5