JComboBox

4 respostas
maruero

Ai galera precisava de uma ideia. Como eu faço um JComboBox se comportar como o barra de endereços de um Browser, tipo vc começa digitando alguma coisa e ele mostra uma lista com os itens q contem no inicio oq o usuario digitou.

Estava pensando em usar Document e DocumentListener mas como não tenho muita experiencias com essas classes queria sabe se tem como fazer de um jeito mais facil.

Outra dúvida: Eu nao posso mudar o q esta escrito num JTextField apartir do seu Document??? Usando o metodo setText() ou insert???

4 Respostas

maruero

Acabei de descobrir q JComboBox model nao tem Document. puts meus planos foram por agua abaixo.

maruero

Galera tentei desse jeito:

JTextField text = ( JTextField ) meuCombo.getEditor().
getEditorComponent();
text.setDocument( meuDocumento );

Meu documento é uma classe extendida de PlainDocument q implementa DocumentListener. E que chama o metodo da interface Muda update();
Na implementação desse metodo na minha classe ouvinte eu tentei mudar os items q estão no JComboBox.
Mas da o seguinte erro.

IllegalStateException: Attempt to mutate in notification.
Eu ACHO q esse erro é gerado pq eu estou tentando mudar um component q está bloqueado pela thread de interface.

Alguem ai!!!
Me ajuda!!!

maruero

.

maruero

Consegui galera. hehhehehehehehehehhe (embora ninguem tenha se preoculpado, pois ninguem respondeu).

Realmente estava acontecendo oq eu imaginava pq tentava modificar o objeto enquanto ele estava bloquedo.

Acontecia o seguinte quando eu inseria alguma coisa ele chamava o metodo do DocumentListener insertUpdate() q modificava o proprio componente q então iria chamar de novo algum metodo do DocumentListener ???Update( ) isso entraria num loop infinito então era so retirar os Listeners do Document antes de fazer qualquer alteração e depois do component ser “liberado” e depois devolver os Listeners denovo assim.

javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                   // e.getDocument().removeDocumentListener(listener);
                	e.getDocument().removeDocumentListener( listener );
                    up.muda();
                    e.getDocument().addDocumentListener(listener);
                }
            });
Criado 12 de outubro de 2006
Ultima resposta 12 de out. de 2006
Respostas 4
Participantes 1