[RESOLVIDO] JComboBox não seleciona item duplicado

36 respostas
O

Eu carrego o combo com o BD, só que vi agora que quando eu tenho dois itens iguais ele não seleciona, só seleciona um

exemplo: Antonio, Sandro, Junior,[color=red] Antonio[/color], Marcos…

ele só carrega o primeiro antonio, sendo que no banco de dados os dados são diferentes só o nome é igual,

alguém sabe como resolver esse impasse?

36 Respostas

V

Acredito que o seu SELECT voce tem que usar LEF JOIN, acredito que esta usando INNER JOIN.
mas seu erro é apenas na estrutra SQL do SELECT!

O

Obrigado pela atenção Vitor
humm, mas acontece que só tenho uma tabela, não estou trabalhando com relacionamento…

L

Oi,

Posta seu código relacionado ao JCombo.

Tchauzin!

O

meu select no Dao, Não tem where olha como ele tá

DAO

"SELECT Cod,Nome, Endereco, Telefone, " + "Telefone_2, Telefone_3,Email, to_char(Data_nascimento,'dd/MM/yyyy'), Formacao," + " funcao,Exp_1, Exp_2, Exp_3, Cursos, Trab_Weld,Situacao_Contrat, " + "to_char(Data_Entrevista,'dd/MM/yyyy'), Salario, Obser FROM Curriculo order by nome"

JFRAME

if (pesquisar.isPopupVisible()){          
     
     Curriculum carregando;//essa classe contem os MODELOS
              ArrayList<Curriculum> resultado;//GUARDANDO DENTRO DE UM ARRAY
        int i;
        String nome1 = "",novo = "";
        ControleCurriculum controle = new ControleCurriculum();  //INSTANCIANDO A CLASSE CONTROLE
        resultado = controle.buscarCurriculum(nome1); 
        
        i = pesquisar.getSelectedIndex();
        carregando  = resultado.get(i);

         String trabalhou;
       novo = novo+carregando.getCod();
       codigo.setText(novo);
end.setText(carregando.getEnd());
O

Pessoal deve ser poque eu eu manipulando pelo NOME, que é exibido dentro do jcombobox.

L

Oi,

O código abaixo está um pouco estranho:

if (pesquisar.isPopupVisible()){          
     
     Curriculum carregando;
              ArrayList<Curriculum> resultado;
        int i;
        String nome1 = "",novo = "";
        ControleCurriculum controle = new ControleCurriculum();  
        resultado = controle.buscarCurriculum(nome1);
        
        i = pesquisar.getSelectedIndex();
        carregando  = resultado.get(i);

         String trabalhou;
       novo = novo+carregando.getCod();
       codigo.setText(novo);
end.setText(carregando.getEnd());

Observe que você criou uma variavel nome1 recebendo o valor vazio. Depois você utilizou a chamada do método buscarCurriculum(nome1). Ou seja, você está buscando um currículo de uma pessoa que não existe (vazio).

Quando você executa o resultado.get(i) provavelmente está retornando nada. Justamente pelo motivo que citei acima.

Tendeu?

Tchauzin!

O

é verdade lina vc tem toda razão rsrs,

deixa eu colocar a classe controle ai sim da pra intender…
rsrs

CONTROLE:

public ArrayList<Curriculum> buscarCurriculum(String nome) { Curriculum curriculum; ArrayList<Curriculum> resultado; int i; CurriculumDao dao = new CurriculumDao(); i = nome.length(); if (i==0) { resultado = dao.buscarTodos();//como ele ta vindo vazio sempre ele vai buscar todos nhe? lá do dao... } else { resultado = dao.buscar(nome);// } return resultado; }

Eu seleciono toda a tabela e depois vou usando as linhas que o combobox selecione…

W

uma coisa simples seria vc colocar uma string dentro do jcombobox o cod junto.

Dai ficaria o nome e o código no combo.

L

wilkem:
uma coisa simples seria vc colocar uma string dentro do jcombobox o cod junto.

Dai ficaria o nome e o código no combo.

Oi,

Exatamente. O problema dele é exatamente essa falta do código, que pode ou não ficar visível no JCombo. Podes apresentar apenas o nome e o código fica interno no programa (se for o caso).

Tchauzin!

O

ho wilkem nesse meus exemplos vc sabe como implementar isso? no começo eu até tentei mas não consegui…

O

ho lina da uma dica por favor como faz, olha se tiver sem tempo agora eu espero pra quando vc tiver um tempinho…

abraço muito obrigado meus nobress…

é pq minha lógica de programação é deficiente mas estou tentando aprender…

L

Oi,

Então. Na verdade é simples. Quando você executar o método dao.buscarTodos() irá trazer todas as linhas na base de dados. Evidentemente, se você tiver duas LINA cadastrada (o que é muito dificil existir 2 nome desse no mundo), o seu ArrayList conterá 2 add LINA. Justamente porque o ArrayList não elimina os indices duplicados (o que é correto).

A única forma de diferencia-las, seria a utilização do código da pessoa (SELECT Cod, Nome). Então, logicamente, você deve popular o seu JCombo com COD - NOME.

Após o retorno Array de buscarCurriculum(String), você deverá percorre-lo e compara-lo com o getSelectedIndex do seu JCombo.

resultado = controle.buscarCurriculum(nome1);

for (int i = 0; i < resultado.size(); i++) {

   int
   ln_cod = resultado.get(i).getCod();

   String
   ls_nome = resultado.get(i).getNome();

   String
   ls_juntando = String.valueOf(ln_cod)+"-"+ls_nome;

   if (pesquisar.getSelectedItem().toString().equals(ls_juntando)) {
 
      // encontrei a pessoa certa.

   }
}

Tchauzin!

O

eita to tentando implementar pera ae

O

Lina to tendo problema para colocar o modelo olha só:

Curriculum carregando;// ele pede para iniciar a variavel
              ArrayList<Curriculum> resultado;
     
        String nome1 = "";
        ControleCurriculum controle = new ControleCurriculum();  
        
        resultado = controle.buscarCurriculum(nome1);  
  
for (int i = 0; i < resultado.size(); i++) {  
  
   int  
   ln_cod = resultado.get(i).getCod();  
  
   String  
   ls_nome = resultado.get(i).getNome();  
  
   String  
   ls_juntando = String.valueOf(ln_cod)+"-"+ls_nome;  
  
   if (pesquisar.getSelectedItem().toString().equals(ls_juntando)) {  
  nome.setText(carregando.getNome());//da erro aqui pq carregando não foi iniciado; antes era:   i = pesquisar.getSelectedIndex();
        carregando  = resultado.get(i);
       end.setText(carregando.getEnd());
      // encontrei a pessoa certa.  
  
   }  
}
L

Oi,

Você vai ter que usar agora a variavel resultado.

Curriculum carregando;// ele pede para iniciar a variavel
              ArrayList<Curriculum> resultado;
     
        String nome1 = "";
        ControleCurriculum controle = new ControleCurriculum();  
        
        resultado = controle.buscarCurriculum(nome1);  
  
for (int i = 0; i < resultado.size(); i++) {  
  
   int  
   ln_cod = resultado.get(i).getCod();  
  
   String  
   ls_nome = resultado.get(i).getNome();  
  
   String  
   ls_juntando = String.valueOf(ln_cod)+"-"+ls_nome;  
  
   if (pesquisar.getSelectedItem().toString().equals(ls_juntando)) {  
  nome.setText(resultado.get(i).getNome()); // ou então nome.setText(ls_nome); ---> vai dar o mesmo resultado.
        carregando  = resultado.get(i);
       end.setText(carregando.getEnd());
      // encontrei a pessoa certa.  
  
   }  
}
O

Lina é porque o meu select colocar toda a consulta dentro da Classe MODELO que é a classe: CURRICULUM,

dai ele não ta setando nada pq agente não ta acessando o resultado dentro da classe modelo, deixa eu te mostrar ela:

eu uso essa classe pra intermediar entre o banco e a aplicação tudo passa por aqui: se vc olhar o meu select sempre uso ele...
*/
package modelo;
/**
 *
 * @author Oesly Nunes
 */
public class Curriculum {
    private int cod;
    private int maxCod;
    private String nome;
    private String end;
    private String tel1;
    private String tel2;
    private String tel3;
    private String email;
    private String formacao;
    private String funcao;
    private String experiencia1;
    private String experiencia2;
    private String experiencia3;
    private String cursos;
    private String trabalhouNaWeld;
    private String situacaoContrato;
    private String dataEntrevista;
    private String salario;
    private String nascimento;
    private String observacao;
    
        public void setCod(int cod) {  
        this.cod = cod;  
        }  
        public void setMaxCod(int maxCod) {  
        this.maxCod = maxCod;  
        }  
        public void setNome(String nome) {
        this.nome = nome;
        }
        public void setEnd(String end) {
        this.end = end;
        }
        public void setTel1(String tel1){
        this.tel1 = tel1;
        } 
        public void setTel2(String tel2){
        this.tel2 = tel2;
        }
        public void setTel3(String tel3){
        this.tel3 = tel3;
        }
        public void setEmail(String email){
        this.email = email;
        }
        public void setFormacao(String formacao){
        this.formacao = formacao;
        }
        public void setFuncao(String funcao){
        this.funcao = funcao;
        }
        public void setExperiencia1(String experiencia1){
        this.experiencia1 = experiencia1;
        }
        public void setExperiencia2(String experiencia2){
        this.experiencia2 = experiencia2;
        }
       
        
        
        
        public int getCod(){  
        return this.cod;  
        }  
        public int getMaxCod(){
        return this.maxCod;
        }
        public String getNome() {
        return this.nome;
        }
        public String getEnd() {
        return this.end;
        }
        public String getTel1(){
        return this.tel1;
        } 
        public String getTel2(){
        return this.tel2;
        }
        public String getTel3(){
        return this.tel3;
        }
        public String getEmail(){
        return this.email;
        }
        public String getFormacao(){
        return this.formacao;
        }
        public String getFuncao(){
        return this.funcao;
        }
        public String getExperiencia1(){
        return this.experiencia1;
        }
     
        
}
L

Oi,

Faz isso então ó:

Curriculum carregando;// ele pede para iniciar a variavel
              ArrayList<Curriculum> resultado;
     
        String nome1 = "";
        ControleCurriculum controle = new ControleCurriculum();  
        
        resultado = controle.buscarCurriculum(nome1);  
  
for (int i = 0; i < resultado.size(); i++) {  
  
   int  
   ln_cod = resultado.get(i).getCod();  
  
   String  
   ls_nome = resultado.get(i).getNome();  
  
   String  
   ls_juntando = String.valueOf(ln_cod)+"-"+ls_nome;  
  
   if (pesquisar.getSelectedItem().toString().equals(ls_juntando)) {  
   carregando  = resultado.get(i);
  nome.setText(carregando.getNome()); // ou então nome.setText(ls_nome); ---> vai dar o mesmo resultado.
       
       end.setText(carregando.getEnd());
      // encontrei a pessoa certa.  
  
   }  
}
O

ele não ta carregando nada nos campos, olha o que ele deve fazer é ao selecionar o item do JCOMBOBOX que é o NOME ele carregar todas as informações referentes no demais componentes como: endereço, telefone…

não da erro mas não ta preenchendo nada…

L
Oesly:
ele não ta carregando nada nos campos, olha o que ele deve fazer é ao selecionar o item do JCOMBOBOX que é o NOME ele carregar todas as informações referentes no demais componentes como: endereço, telefone...

não da erro mas não ta preenchendo nada...

Oi,

Coloca System.out.println e verifica o que está acontecendo!

Curriculum carregando;// ele pede para iniciar a variavel
              ArrayList<Curriculum> resultado;
System.out.println("1");
        String nome1 = "";
        ControleCurriculum controle = new ControleCurriculum();  
System.out.println("2");        
        resultado = controle.buscarCurriculum(nome1);  
System.out.println("3 "+resultado.size());
for (int i = 0; i < resultado.size(); i++) {  
System.out.println("4");          
   int  
   ln_cod = resultado.get(i).getCod();  
System.out.println("4.1: "+ln_cod);        
   String  
   ls_nome = resultado.get(i).getNome();  
System.out.println("4.2: "+ls_nome);          
   String  
   ls_juntando = String.valueOf(ln_cod)+"-"+ls_nome;  
System.out.println("4.3: "+ls_juntando);            
System.out.println("4.4: "+pesquisar.getSelectedItem().toString());            
   if (pesquisar.getSelectedItem().toString().equals(ls_juntando)) {  
   carregando  = resultado.get(i);
  nome.setText(carregando.getNome()); // ou então nome.setText(ls_nome); ---> vai dar o mesmo resultado.
       
       end.setText(carregando.getEnd());
      // encontrei a pessoa certa.  
  
   }  
}

Posta aqui depois ;)

Tchauzin!

O

só selecionei o 1º Item do Combobox
o Retorno foi esse:

run:
Conexão Fechada//essa primeira conexão é quando eu carrego o combobox, que está num evento do JFRAME
1
2
Conexão Fechada
3 3
4
4.1: 3
4.2: Antonio
4.3: 3-Antonio
4.4: Antonio
4
4.1: 1
4.2: Antonio 01
4.3: 1-Antonio 01
4.4: Antonio
4
4.1: 2
4.2: MARIA DE SOUZA
4.3: 2-MARIA DE SOUZA
4.4: Antonio
CONSTRUÍDO COM SUCESSO (tempo total: 8 segundos)
L

Oi,

O erro está aqui ó:

4.2: Antonio
4.3: 3-Antonio
4.4: Antonio

Me mostre como seu JCombo está sendo populado.

Tchauzin!

O

esse é o algorítimo responsavel pela população do jCombobox
Muito obrigado por esta mim ajudando Deus te abençoe, só tenho a agradecer.

String nome2 ="";
ControleCurriculum controle2 = new ControleCurriculum();     
  
for (Curriculum curriculo : controle2.buscarCurriculum(nome2) ){  
          pesquisar.addItem(curriculo.getNome());     
 
   //   pesquisar.repaint();   
}
L

Oi,

Mude para isso:

String nome2 ="";
ControleCurriculum controle2 = new ControleCurriculum();     
  
for (Curriculum curriculo : controle2.buscarCurriculum(nome2) ){  
          pesquisar.addItem(curriculo.getCod()+"-"+curriculo.getNome());     
 
   //   pesquisar.repaint();   
}

Teste novamente o programa. Talvez funcione ;)

Não precisa agradecer, estamos aqui para isso.

Tchauzin!

O

FUNCIONOUUUU

eita ele não tava mostrando pq tava sem o codigo kkkk intendi,

olha mais tem outro problema eu uso uma classe para fazer o alto complete no combobox,

e como tem o numero agora ta na frente não tem com eu fazer os filtros no combo…

i agora? kkk

L

Oi,

Deve ser só adapta-lo. Se quiser postar aqui também …

Tchauzin!

O
/*

package formularios;
import java.awt.event.*;  
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.text.Collator;
import java.util.Locale;
import javax.swing.*;
import javax.swing.text.*;  
  

public class AutoCompletion extends PlainDocument {  
    private static final long serialVersionUID = 5157735565710292356L;  
    JComboBox comboBox;  
    ComboBoxModel model;  
    JTextComponent editor;  
    // flag to indicate if setSelectedItem has been called  
    // subsequent calls to remove/insertString should be ignored  
    boolean selecting=false;  
    boolean hidePopupOnFocusLoss;  
    boolean hitBackspace=false;  
    boolean hitBackspaceOnSelection;  
  
    KeyListener editorKeyListener;  
    FocusListener editorFocusListener;  
  
    public AutoCompletion(final JComboBox comboBox) {  
        this.comboBox = comboBox;  
        model = comboBox.getModel();  
        comboBox.addActionListener(new ActionListener() {  
            @Override  
            public void actionPerformed(ActionEvent e) {  
                if (!selecting) highlightCompletedText(0);  
            }  
        });  
        comboBox.addPropertyChangeListener(new PropertyChangeListener() {  
            @Override  
            public void propertyChange(PropertyChangeEvent e) {  
                if (e.getPropertyName().equals("editor")) configureEditor((ComboBoxEditor) e.getNewValue());  
                if (e.getPropertyName().equals("model")) model = (ComboBoxModel) e.getNewValue();  
            }  
        });  
        editorKeyListener = new KeyAdapter() {  
            @Override  
            public void keyPressed(KeyEvent e) {  
                if (comboBox.isDisplayable()) comboBox.setPopupVisible(true);  
                hitBackspace=false;  
                switch (e.getKeyCode()) {  
                    // determine if the pressed key is backspace (needed by the remove method)  
                    case KeyEvent.VK_BACK_SPACE : hitBackspace=true;  
                    hitBackspaceOnSelection=editor.getSelectionStart()!=editor.getSelectionEnd();  
                    break;  
                    // ignore delete key  
                    case KeyEvent.VK_DELETE : e.consume();  
                    comboBox.getToolkit().beep();  
                    break;  
                }  
            }  
        };  
        // Bug 5100422 on Java 1.5: Editable JComboBox won't hide popup when tabbing out  
        hidePopupOnFocusLoss=System.getProperty("java.version").startsWith("1.5");  
        // Highlight whole text when gaining focus  
        editorFocusListener = new FocusAdapter() {  
            @Override  
            public void focusGained(FocusEvent e) {  
                highlightCompletedText(0);  
            }  
            @Override  
            public void focusLost(FocusEvent e) {  
                // Workaround for Bug 5100422 - Hide Popup on focus loss  
                if (hidePopupOnFocusLoss) comboBox.setPopupVisible(false);  
            }  
        };  
        configureEditor(comboBox.getEditor());  
        // Handle initially selected object  
        Object selected = comboBox.getSelectedItem();  
        if (selected!=null) setText(selected.toString());  
        highlightCompletedText(0);  
    }  
  
    public static void enable(JComboBox comboBox) {  
        // has to be editable  
        comboBox.setEditable(true);  
        // change the editor's document  
        new AutoCompletion(comboBox);  
    }  
  
    void configureEditor(ComboBoxEditor newEditor) {  
        if (editor != null) {  
            editor.removeKeyListener(editorKeyListener);  
            editor.removeFocusListener(editorFocusListener);  
        }  
  
        if (newEditor != null) {  
            editor = (JTextComponent) newEditor.getEditorComponent();  
            editor.addKeyListener(editorKeyListener);  
            editor.addFocusListener(editorFocusListener);  
            editor.setDocument(this);  
        }  
    }  
  
    @Override  
    public void remove(int offs, int len) throws BadLocationException {  
        // return immediately when selecting an item  
        if (selecting) return;  
        if (hitBackspace) {  
            // user hit backspace => move the selection backwards  
            // old item keeps being selected  
            if (offs>0) {  
                if (hitBackspaceOnSelection) offs--;  
            } else {  
                // User hit backspace with the cursor positioned on the start => beep  
                comboBox.getToolkit().beep(); // when available use: UIManager.getLookAndFeel().provideErrorFeedback(comboBox);  
            }  
            highlightCompletedText(offs);  
        } else {  
            super.remove(offs, len);  
        }  
    }  
  
    @Override  
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {  
        // return immediately when selecting an item  
        if (selecting) return;  
        // insert the string into the document  
        super.insertString(offs, str, a);  
        // lookup and select a matching item  
        Object item = lookupItem(getText(0, getLength()));  
        if (item != null) {  
            setSelectedItem(item);  
        } else {  
            // keep old item selected if there is no match  
            item = comboBox.getSelectedItem();  
            // imitate no insert (later on offs will be incremented by str.length(): selection won't move forward)  
            offs = offs-str.length();  
            // provide feedback to the user that his input has been received but can not be accepted  
            comboBox.getToolkit().beep(); // when available use: UIManager.getLookAndFeel().provideErrorFeedback(comboBox);  
        }  
        if(item != null)  
            setText(item.toString());  
        else   
            setText("");  
        // select the completed part  
        highlightCompletedText(offs+str.length());  
              
    }  
  
    private void setText(String text) {  
        try {  
            // remove all text and insert the completed string  
            super.remove(0, getLength());  
            super.insertString(0, text, null);  
        } catch (BadLocationException e) {  
            throw new RuntimeException(e.toString());  
        }  
    }  
  
    private void highlightCompletedText(int start) {  
        editor.setCaretPosition(getLength());  
        editor.moveCaretPosition(start);  
    }  
  
    private void setSelectedItem(Object item) {  
        selecting = true;  
        model.setSelectedItem(item);  
        selecting = false;  
    }  
  
    private Object lookupItem(String pattern) {  
        Object selectedItem = model.getSelectedItem();  
        // only search for a different item if the currently selected does not match  
        if (selectedItem != null && startsWithIgnoreAccentsAndCase(selectedItem.toString(), pattern)) {  
            return selectedItem;  
        } else {  
            // iterate over all items  
            for (int i=0, n=model.getSize(); i < n; i++) {  
                Object currentItem = model.getElementAt(i);  
                // current item starts with the pattern?  
                if (currentItem != null && startsWithIgnoreAccentsAndCase(currentItem.toString(), pattern)) {  
                    return currentItem;  
                }  
            }  
        }  
        // no item starts with the pattern => return null  
        return null;  
    }  
    private static Collator collator = null;  
    private static Collator getCollator() {  
        if (collator == null) {  
            collator = Collator.getInstance (new Locale ("pt", "BR"));  
            collator.setStrength(Collator.PRIMARY);  
        }  
        return collator;  
    }  
    public static boolean startsWithIgnoreAccentsAndCase(String source,String target) {  
        if (target.length() > source.length())  
            return false;  
        return getCollator().compare(source.substring(0, target.length()),target) == 0;  
    }  
}
eu chamo ele assim no frame:
private void pesquisa(){
   //AutoCompleteDecorator.decorate(this.pesquisar); 
       AutoCompletion.enable(pesquisar);
   
   }
O

Lina tem como fazer o combobox digitar depois do 2º caractere??? axo que isso resolveria.

L

Oi,

Sim. Isso resolveria. Estava olhando a classe AutoCompletion.java e fiquei realmente impressionada. Vou guarda-la em minha lib (rsrs).

Tudo gira em torno do método lookupItem(String pattern).

Ajustando ele já resolveria. Vou pensar e já respondo.

Tchauzin!

L

Oi,

Mude o método look para isso ó:

private Object lookupItem(String pattern) { // Object selectedItem = model.getSelectedItem(); // only search for a different item if the currently selected does not match // if (selectedItem != null && startsWithIgnoreAccentsAndCase(selectedItem.toString(), pattern)) { // return selectedItem; // } else { // iterate over all items for (int i=0, n=model.getSize(); i < n; i++) { Object currentItem = model.getElementAt(i); // current item starts with the pattern? if (currentItem != null && currentItem.toString().contains(pattern)) { return currentItem; } } // } // no item starts with the pattern => return null return null; }

Teste e analise se tem um resultado satisfatório.

Tchauzin!

W

Foi mal a demora mais vc ja teve um ajuda bem melhor da Lina fui.
Ps: achei interessante a classe AutoCompletion vou pegar ela para uso posterior vlw.

O

Ficou do mesmo jeito lina, o problema é que quando vou digitar o nome que preciso no jcombobox, ele não aceita
nenhuma letra porque todos os itens iniciam com números…

E

Só para tumultuar. Estava com minha esposa em uma loja de bijuterias - e havia bijuterias da marca chinesa “Li Na” :slight_smile: - talvez fosse referência a uma tenista chinesa, 李娜 (Li Na).

L
entanglement:
lina:
Evidentemente, se você tiver duas LINA cadastrada (o que é muito dificil existir 2 nome desse no mundo), o seu ArrayList conterá 2 add LINA. Justamente porque o ArrayList não elimina os indices duplicados (o que é correto).

Só para tumultuar. Estava com minha esposa em uma loja de bijuterias - e havia bijuterias da marca chinesa "Li Na" :) - talvez fosse referência a uma tenista chinesa, 李娜 (Li Na).

Oi,

Sabe que eu não sei o real significado do meu nome? Vai ver que é esse! rsrs

Então, aproveitando... não consegui uma solução plausível para o nosso amigo! Acho que colocar o código na frente dos itens do Combo pode não ter sido uma boa ideia.

O detalhe é que nesse auto-complete, quando existem nomes como por exemplo: Administrador, Automação a logica está falha.

01-Administrador
02-Automação

O método lookupItem(String) faz uso de startsWithIgnoreAccentsAndCase, e quando o usuário digita A, automaticamente ele pega o índice Administrador. Como ele testa se existe um item selecionado antes, ele não dá a opção do usuário continuar digitando o restante da palavra (que seria utomação).

private Object lookupItem(String pattern) {  
        Object selectedItem = model.getSelectedItem();  
        // only search for a different item if the currently selected does not match  
        if (selectedItem != null && startsWithIgnoreAccentsAndCase(selectedItem.toString(), pattern)) {  
            return selectedItem;  
        } else {  
            // iterate over all items  
            for (int i=0, n=model.getSize(); i < n; i++) {  
                Object currentItem = model.getElementAt(i);  
                // current item starts with the pattern?  
                if (currentItem != null && startsWithIgnoreAccentsAndCase(currentItem.toString(), pattern)) {  
                    return currentItem;  
                }  
            }  
        }  
        // no item starts with the pattern => return null  
        return null;  
    }

Se eu tirar a primeira condição IF do método, implica em outro método insertString:

@Override  
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {  
        // return immediately when selecting an item  
        if (selecting) return;  
        // insert the string into the document  
        super.insertString(offs, str, a);  
        // lookup and select a matching item  
        Object item = lookupItem(getText(0, getLength()));  
        if (item != null) {  
            setSelectedItem(item);  
        } else {  
            // keep old item selected if there is no match  
            item = comboBox.getSelectedItem();  
            // imitate no insert (later on offs will be incremented by str.length(): selection won't move forward)  
            offs = offs-str.length();  
            // provide feedback to the user that his input has been received but can not be accepted  
            comboBox.getToolkit().beep(); // when available use: UIManager.getLookAndFeel().provideErrorFeedback(comboBox);  
        }  
        if(item != null)  
            setText(item.toString());  
        else   
            setText("");  
        // select the completed part  
        highlightCompletedText(offs+str.length());  
              
    }

Se eu remover o código do nome em lookupItem e tirasse o primeiro IF, também não funcionaria:

private Object lookupItem(String pattern) {  
      //  Object selectedItem = model.getSelectedItem();  
        // only search for a different item if the currently selected does not match  
//        if (selectedItem != null && startsWithIgnoreAccentsAndCase(selectedItem.toString(), pattern)) {  
//            return selectedItem;  
//        } else {  
            // iterate over all items  
            for (int i=0, n=model.getSize(); i < n; i++) {  
                Object currentItem = model.getElementAt(i);  
                // current item starts with the pattern?  
                if (currentItem != null && startsWithIgnoreAccentsAndCase(currentItem.toString().replaceAll("[^a-z|A-Z]", ""), pattern)) {  
                    return currentItem;  
                }  
            }  
//        }  
        // no item starts with the pattern => return null  
        return null;  
    }

Como estou sem tempo para ficar testando, fiquei numa sinuca de bico =)

Tchauzin!

O

ha lina não se preocupa eu não tenho muita pressa, só falta isso pra terminar o softzinho, assim que vc tiver um tempo lebre de mim, só tenho a agradecer por toda ajuda com certeza meu banco de dados de inteligencia só aumentou, muito abrigado,

um bom fim de semana,

ae pessoal quem poder ajudar fica a vontade…

abraço

O

Olá, RESOLVIDO, com a ajuda de Deus e da lina e do douglaskd, o douglas teve a ideia de deixar primeiro o nome e depois o id ex.

NOME - 3

AI TUDO RESOLVIDO

MUITO OBRIGADO LINA, DOUGLAS

vcs são uma bençãoo.

abraço.

L

Oesly:
Olá, RESOLVIDO, com a ajuda de Deus e da lina e do douglaskd, o douglas teve a ideia de deixar primeiro o nome e depois o id ex.

NOME - 3

AI TUDO RESOLVIDO

MUITO OBRIGADO LINA, DOUGLAS

vcs são uma bençãoo.

abraço.

Oi,

Puxa vida. É verdade. Isso poderia ser feito. As vezes estamos tão viciados na tentativa de uma solução e não enxergamos o que está na nossa cara. rsrs

Tchauzin!

Criado 1 de março de 2013
Ultima resposta 4 de mar. de 2013
Respostas 36
Participantes 5