Pegando Nomes De uma Lista JTable, removendo as duplicadas e passando para JComboBox
7 respostas
swingprogramaçãojava
J
Jefersondepaulaqueir
Bom dia, estou com um problema, eu tenho uma lista em uma jTable com nomes e idades, eu quero pegar os nomes da lista, remover os nomes duplicados e passar apenas os nomes únicos para um JComboBox.
Nenhuma as opções que pesquisei e testei, funcionou…
privatevoidbtn_salveActionPerformed(java.awt.event.ActionEventevt){//Pegando valores Do UsuarioStringnome=field_enviar.getText();intidade=21;Pessoap=newPessoa(nome,idade);ComboPessoac=newComboPessoa(p.getNome());model.addRow(p);ArrayList<String>lista=newArrayList<>();for(inti=0;i<model.getRowCount();i++){lista.add(model.getValueAt(i,0).toString());}Set<String>primes=newLinkedHashSet<String>(lista);lista.clear();lista.addAll(primes);System.out.println("Lista: "+lista);}
Pelo o que eu entendi você quer pegar uma List dos nomes que você já tem e deixar apenas nomes distintos nesta lista correto? Qual versão do Java está utilizando?
Utilizando java 8+ é bem simples, você pode fazer:
List listNomesDistintos = listNomes.stream().distinct().collect(Collectors.toList());
Onde a List de Strings é transformada em Stream é filtrada apenas para Strings distintas e retornada novamente como uma List.
J
Jefersondepaulaqueir
java 8, isso, quero pega a lista da tabela, filtrar eles e passar para um JcomboBox, até o filtro eu consegui, mas quando eu tento passar esses valores para o Jcombobox, ele vai até bem, até que se repete…
D
Daniel95
Mas o código que você postou é basicamente a tentativa de fazer uma Lista de String ficar com seu conteúdo distinto e não popular um ComboBox. Assumi que o erro era em deixar os valores distintos.
E qual o problema exatamente, a Lista está ou não está populada de forma distinta?
Como você está populando o ComboBox? Posta o código.
J
Jefersondepaulaqueir
a minha ideia era a seguinte Daniel, eu tenho uma tabela, com vários nomes, e alguns nomes são repetidos, então eu queria pegar somente os nomes distintos dessa tabela, a passar ela para um Combox, e sempre que eu adicionar um nome nessa tabela, se ela for distinta ela vai para o combox, se ele não for distinto ele não irar pra combox.
J
Jefersondepaulaqueir
Depois de varias tentativas, eu consegui fazer dessa forma
PessoaModalpModal;ArrayList<String>list;ComboBoxModelmodel;ArrayList<String>nomes=newArrayList<>();publicNewJFrame(){initComponents();pModal=newPessoaModal();jTable.setModel(pModal);}//Pegando Array de Strings e removendo as duplicadaspublicstatic<T>ArrayList<T>removeDuplicate(ArrayList<T>list){ArrayList<T>newList=newArrayList<T>();for(Telement:list){if(!newList.contains(element)){newList.add(element);}}returnnewList;}//Convetendo Arrays para StringspublicstaticString[]convert(ArrayListlist){ArrayList<String>newList=removeDuplicate(list);String[]array=newList.toArray(newString[newList.size()]);returnarray;}privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){//Adicionando RowPessoap=newPessoa();p.setNome(jTextField.getText());pModal.addRow(p);//Pegando os nomes e passando para uma Arraynomes.add(p.getNome());Object[]items=convert(nomes);model=newDefaultComboBoxModel(items);Combo.setModel(model);}
D
Daniel951 like
Troca a definição deste método:
//Pegando Array de Strings e removendo as duplicadaspublicstatic<T>ArrayList<T>removeDuplicate(ArrayList<T>list){ArrayList<T>newList=newArrayList<T>();for(Telement:list){if(!newList.contains(element)){newList.add(element);}}returnnewList;}