JCombobox

Boa noite, pessoal como faco para mim pode escrever na minha jcombobox ? digo tenho um combobox que traz dados do banco e precisava que essa combobox pude-se escrever nela e fazer com que ela pesquisa-se do conteudo do banco alguem tem algum exemplo de como posso fazer isso? muito obrigada pela atencao!

Olá, vc quer fazer um JCombobox com autocomplete? É isso?

sim amigo.

da uma olhada nesse demo:
http://swinglabs.org/demos.jsp

O que tem o autocomplete é o primeiro (SwingX Demo). Ai nesse demo vc vai em autocomplete na lista do lado esquerdo da tela.

Eu uso ele nos meus projetos e funciona perfeitamente para o autocomplete, e é super simples de usar.

Se depois de ver o demo for o que vc precisa baixe o jar do projeto em:

http://swinglabs.org/downloads.jsp

baixe a versão SwingX 1.0

apos adicionar o jar baixado ao seu classpath basta vc fazer o seguinte na inicialização do seu combo:

Simples assim!

[]'s

vc poderia upar o jar para mim pois o unico que consegui pega do 1.0 foi o source e n vem com arquivo jar =//

Não tenho aqui comigo, a noite quando chegar em casa eu pego e te envio!

[]'s

consegui faze o download dos arquivos do site mas me fala uma coisa qual eh o correto? source binaries ou javadoc pq pegai os 3 mas ambos sao arquivos zipado com um monte de coisa dentro menos o jar! qual nome do jar?

Oi, me desculpe ontem a noite não pude te enviar o arquivo.
O que eu tenho é swingx.jar mesmo. Ia te enviar o arquivo agora mas não vai pq é mais de um 1mb e aqui so envia até 512k pelo forum.

Me passa um email pra eu te enviar o arquivo.

[]'s

procura no google por respositórios do maven…“Maven 2 repository”, e lá tu encontra muita coisa, inclusive o .jar do swingx.

Fernando Rosa

Fernando e thiago obrigado pela atencao de vcs consegui achar o jar nos repositorios, e tambem consegui carregar o meu combobox mas me dis uma coisa para ele se tornar editavel como faco? pq ele carrega os arquivos mas so dexa eu escrever no combo se o que eu estiver digitando ja existir no banco se ele nao existir ele nao deixa eu adicionar no caso!

bom…eu não conheço mas o caminho talvez para isso seja extender esse compnente e adicionar o comportamento desejado.

Bons estudos e boa sorte!

Fernando

Concordo com o amigo Fernado, imagino que a forma de vc conseguir tal funcionalidade será estendendo o componente e então adicionando e/ou removendo funcionalidades.

[]'s

Alguem pode me da uma ajuda veja so extendo meu combobox usando essa classe

package br.com.estudo.util;

import java.awt.event.ActionEvent;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.Action;
import javax.swing.ActionMap;
import javax.swing.ComboBoxEditor;
import javax.swing.InputMap;
import javax.swing.JComboBox;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.text.DefaultEditorKit;
import javax.swing.text.JTextComponent;
import javax.swing.text.TextAction;

import org.jdesktop.swingx.autocomplete.AbstractAutoCompleteAdaptor;
import org.jdesktop.swingx.autocomplete.AutoCompleteComboBoxEditor;
import org.jdesktop.swingx.autocomplete.AutoCompleteDocument;
import org.jdesktop.swingx.autocomplete.ComboBoxAdaptor;
import org.jdesktop.swingx.autocomplete.ObjectToStringConverter;
//import org.jdesktop.swingx.autocomplete.workarounds.AquaLnFPopupLocationFix;

/**
 * This class contains only static utility methods that can be used to set up
 * automatic completion for some Swing components.
 * <p>
 * Usage examples:
 * </p>
 * <p>
 *
 * <pre><code>
 * JComboBox comboBox = [...];
 * AutoCompleteDecorator.<b>decorate</b>(comboBox);
 *
 * List items = [...];
 * JTextField textField = [...];
 * AutoCompleteDecorator.<b>decorate</b>(textField, items);
 *
 * JList list = [...];
 * JTextField textField = [...];
 * AutoCompleteDecorator.<b>decorate</b>(list, textField);
 * </code></pre>
 *
 * </p>
 *
 * @author Thomas Bierhance
 */
public class AutoCompleteDecorator {

    /**
     * Enables automatic completion for the given JComboBox. The automatic
     * completion will be strict (only items from the combo box can be selected)
     * if the combo box is not editable.
     *
     * @param comboBox a combo box
     */
    public static void decorate(final JComboBox comboBox) {
        decorate(comboBox, ObjectToStringConverter.DEFAULT_IMPLEMENTATION);
    }

    /**
     * Enables automatic completion for the given JComboBox. The automatic
     * completion will be strict (only items from the combo box can be selected)
     * if the combo box is not editable.
     *
     * @param comboBox a combo box
     * @param stringConverter the converter used to transform items to strings
     */
    public static void decorate(final JComboBox comboBox,
            final ObjectToStringConverter stringConverter) {
        boolean strictMatching = !comboBox.isEditable();
        // has to be editable
        comboBox.setEditable(true);
        // fix the popup location
        //AquaLnFPopupLocationFix.install(comboBox);

        // configure the text component=editor component
        JTextComponent editorComponent = (JTextComponent) comboBox.getEditor().getEditorComponent();
        final AbstractAutoCompleteAdaptor adaptor = new ComboBoxAdaptor(
                comboBox);
        final AutoCompleteDocument document = new AutoCompleteDocument(adaptor,
                strictMatching, stringConverter);
        decorate(editorComponent, document, adaptor);

        // show the popup list when the user presses a key
        final KeyListener keyListener = new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent keyEvent) {
                // don't popup on action keys (cursor movements, etc...)
                if (keyEvent.isActionKey()) {
                    return;
                }
                // don't popup if the combobox isn't visible anyway
                if (comboBox.isDisplayable() && !comboBox.isPopupVisible()) {
                    int keyCode = keyEvent.getKeyCode();
                    // don't popup when the user hits shift,ctrl or alt
                    if (keyCode == KeyEvent.VK_SHIFT || keyCode == KeyEvent.VK_CONTROL || keyCode == KeyEvent.VK_ALT) {
                        return;
                    }
                    // don't popup when the user hits escape (see issue #311)
                    if (keyCode == KeyEvent.VK_ESCAPE || keyCode == KeyEvent.VK_ENTER) {
                        return;
                    }

                    if (keyEvent.isAltDown() || keyEvent.isControlDown()) {
                        return;
                    }

                    comboBox.setPopupVisible(true);
                }
            }
        };
        editorComponent.addKeyListener(keyListener);

        if (stringConverter != ObjectToStringConverter.DEFAULT_IMPLEMENTATION) {
            comboBox.setEditor(new AutoCompleteComboBoxEditor(
                    comboBox.getEditor(), stringConverter));
        }

        // Changing the l&f can change the combobox' editor which in turn
        // would not be autocompletion-enabled. The new editor needs to be
        // set-up.
        comboBox.addPropertyChangeListener("editor",
                new PropertyChangeListener() {

                    public void propertyChange(PropertyChangeEvent e) {
                        ComboBoxEditor editor = (ComboBoxEditor) e.getNewValue();
                        if (editor != null && editor.getEditorComponent() != null) {
                            if (!(editor instanceof AutoCompleteComboBoxEditor) && stringConverter != ObjectToStringConverter.DEFAULT_IMPLEMENTATION) {
                                comboBox.setEditor(new AutoCompleteComboBoxEditor(
                                        editor, stringConverter));
                                // Don't do the decorate step here because
                                // calling setEditor will trigger
                                // the propertychange listener a second time,
                                // which will do the decorate
                                // and addKeyListener step.
                            } else {
                                decorate(
                                        (JTextComponent) editor.getEditorComponent(),
                                        document, adaptor);
                                editor.getEditorComponent().addKeyListener(
                                        keyListener);
                            }
                        }
                    }
                });
    }

    /**
     * Decorates a given text component for automatic completion using the given
     * AutoCompleteDocument and AbstractAutoCompleteAdaptor.
     *
     * @param textComponent a text component that should be decorated
     * @param document the AutoCompleteDocument to be installed on the text
     *        component
     * @param adaptor the AbstractAutoCompleteAdaptor to be used
     */
    public static void decorate(JTextComponent textComponent,
            AutoCompleteDocument document,
            final AbstractAutoCompleteAdaptor adaptor) {
        // install the document on the text component
        textComponent.setDocument(document);

        // mark entire text when the text component gains focus
        // otherwise the last mark would have been retained which is quiet
        // confusing
        textComponent.addFocusListener(new FocusAdapter() {

            @Override
            public void focusGained(FocusEvent e) {
                adaptor.markEntireText();
            }
        });

        // Tweak some key bindings
        InputMap editorInputMap = textComponent.getInputMap();
        if (document.isStrictMatching()) {
            // move the selection to the left on VK_BACK_SPACE
            editorInputMap.put(KeyStroke.getKeyStroke(
                    java.awt.event.KeyEvent.VK_BACK_SPACE, 0),
                    DefaultEditorKit.selectionBackwardAction);
            // ignore VK_DELETE and CTRL+VK_X and beep instead when strict
            // matching
            editorInputMap.put(KeyStroke.getKeyStroke(
                    java.awt.event.KeyEvent.VK_DELETE, 0), errorFeedbackAction);
            editorInputMap.put(KeyStroke.getKeyStroke(
                    java.awt.event.KeyEvent.VK_X,
                    java.awt.event.InputEvent.CTRL_DOWN_MASK),
                    errorFeedbackAction);
        } else {
            ActionMap editorActionMap = textComponent.getActionMap();
            // leave VK_DELETE and CTRL+VK_X as is
            // VK_BACKSPACE will move the selection to the left if the selected
            // item is in the list
            // it will delete the previous character otherwise
            editorInputMap.put(KeyStroke.getKeyStroke(
                    java.awt.event.KeyEvent.VK_BACK_SPACE, 0),
                    "nonstrict-backspace");
            editorActionMap.put(
                    "nonstrict-backspace",
                    new NonStrictBackspaceAction(
                    editorActionMap.get(DefaultEditorKit.deletePrevCharAction),
                    editorActionMap.get(DefaultEditorKit.selectionBackwardAction),
                    adaptor));
        }
    }

    static class NonStrictBackspaceAction extends TextAction {

        Action backspace;
        Action selectionBackward;
        AbstractAutoCompleteAdaptor adaptor;

        public NonStrictBackspaceAction(Action backspace,
                Action selectionBackward, AbstractAutoCompleteAdaptor adaptor) {
            super("nonstrict-backspace");
            this.backspace = backspace;
            this.selectionBackward = selectionBackward;
            this.adaptor = adaptor;
        }

        public void actionPerformed(ActionEvent e) {
            if (adaptor.listContainsSelectedItem()) {
                selectionBackward.actionPerformed(e);
            } else {
                backspace.actionPerformed(e);
            }
        }
    }
    /**
     * A TextAction that provides an error feedback for the text component that
     * invoked the action. The error feedback is most likely a "beep".
     */
    static Object errorFeedbackAction = new TextAction("provide-error-feedback") {

        public void actionPerformed(ActionEvent e) {
            UIManager.getLookAndFeel().provideErrorFeedback(getTextComponent(e));
        }
    };
}
  • o problema eh o seguinte precisava que conforme eu vou digitando ele vai filtrando do combobox exemplo

digitei no componente FORUMG ele tem q aparece na lista do combobox apenas as palavras com FORUMG*, e nao to conseguindo faze isso alguem pode me ajudar muito obrigada!

thiagocg, os links que vc postou não estão funcionando!

Olá pessoal, tenho recebido algumas solicitações por mensagem privada sobre o jcombobox com autocomplete, testei os links que eu havia fornecido anteriormente e realmente estão fora do ar.

A solução que encontrei foi baixar o jar (swingx.jar) pelo site www.findjar.com e funcionou perfeitamente, o único detalhe é q precisa ser baixado pelo link do mirror do maven, fora isso td tranquilo e funcionando.

Segue o link já com a busca realizada:
http://www.findjar.com/index.x?query=swingx

Para quem precisar creio que esta seja uma solução.

[]'s

como eu faço pra colocar o código:

AutoCompleteDecorator.decorate(this.meuCombo);  

na inicialização do combo??? já que eu estou utilizando o NETBEANS,
eu até tentei usar ele no evento ActionPerformed… E OUTROS,
mas é que deu conflito com um array que eu tenho nesse ActionPerformed do combo,
em que lugar do jframe que se coloca ele?

grato

RESOLVIDO COM ESSE POST AQUI: http://www.guj.com.br/java/116499-auto-complete-combobox-sem-levar-em-conta-acentuacao-resolvido