Iniciar o JCombobox

3 respostas Resolvido
java
PapaiLu

Olá.
Estou trabalhando num projeto e inclui um JCombobox no mesmo e minha dúvida é:

Como carregar o JCombobox sem repetir os dados

Estou tentando carregar o combo com (uma coluna de) dados em um TXT, porém preciso evitar a repetição dos registros (ler o arquivo, verificar o dados e se não estiver presente no combo, adicionar, caso contrário passar para a próxima leitura).

Estou indo por este caminho. Por favor me ajudem!

File Arquivo = new File(Palavras.txt); //lê o arquivo Txt

FileReader leitor = new FileReader(Arquivo);

BufferedReader leitorBuf = new BufferedReader(leitor);

CategoriaArquivo.clear();//limpa o ArrayList que armazena a categoria

String linha=null;

while((linha = leitorBuf.readLine()) !=null){

String colunas[] = linha.split("#"); //lê a linha do arquivo

CategoriaArquivo.add(colunas[4]);   //aproveita a coluna 5 dessa leitura

}

leitorBuf.close();
ComboCategoria.removeAll();
        
        for (int n = 0; n < CategoriaArquivo.size();n++) {
            for (int i = 0;i < ComboCategoria.getItemCount();i++) {
                String str = null;
                String reg = null;
                
                str = (String) CategoriaArquivo.get(n).toString();
                reg = (String) ComboCategoria.getSelectedItem().toString();
                ComboCategoria.getItemAt(i);
                if (ComboCategoria.getSelectedItem() == str) {
                    ComboCategoria.addItem(str);
                }
            }  
        }

Obrigado.

3 Respostas

javaflex

Dá uma olhada nesse exemplo: https://stackoverflow.com/a/8899169

Villagram
Solucao aceita

Espero que funcione, eu reduzi o método injetando as dependências na chamada:

public void teste(){
    File arquivo = new File("Palavras.txt");
    //chama o método passando o arquivo, combo e lista
    addCategoriasCombo(arquivo, comboCategoria, categoriaArquivo);
}

public void addCategoriasCombo(File arquivo, JComboBox comboCategoria, List<String> categoriaArquivo) {
     try {
        categoriaArquivo.clear();
        comboCategoria.removeAll();
        Files.lines(arquivo.toPath()).forEach(ln -> categoriaArquivo.add(ln.split("#")[4]));
        categoriaArquivo.forEach((categoria) -> comboCategoria.addItem(categoria));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Montando as rotinas em métodos curtos você pode reaproveita-los em outras partes do código.

staroski

Procure seguir as convenções de quem programa em Java:
Nomes de classes começam com letra maúscula, nomes de métodos e de variáveis começam com letra minúscula.

Pra não duplicar elementos, faça o seguinte:
Utilize uma coleção do tipo Set na sua classe CategoriaArquivo assim você não terá elementos duplicados.
Utilize um ComboBoxModel para renderizar seu objeto da classe CategoriaArquivo aí você não precisará mais fazer um for para adicionar itens no JComboBox.

Criado 10 de janeiro de 2019
Ultima resposta 11 de jan. de 2019
Respostas 3
Participantes 4