[RESOLVIDO] JComboBox não seleciona item duplicado

36 respostas
Oesly

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

vitordarela

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!

Oesly

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

lina

Oi,

Posta seu código relacionado ao JCombo.

Tchauzin!

Oesly

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());
Oesly

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

lina

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!

Oesly

é 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.

lina

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!

Oesly

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

Oesly

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…

lina

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!

Oesly

eita to tentando implementar pera ae

Oesly

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.  
  
   }  
}
lina

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.  
  
   }  
}
Oesly

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;
        }
     
        
}
lina

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.  
  
   }  
}
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…

lina
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!

Oesly

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)
lina

Oi,

O erro está aqui ó:

4.2: Antonio
4.3: 3-Antonio
4.4: Antonio

Me mostre como seu JCombo está sendo populado.

Tchauzin!

Oesly

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();   
}
lina

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!

Oesly

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

lina

Oi,

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

Tchauzin!

Oesly
/*

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);
   
   }
Oesly

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

lina

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!

lina

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.

Oesly

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).

lina
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!

Oesly

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

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.

lina

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