GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Iniciar o JCombobox

java
Tags: #<Tag:0x00007f9ddece0788>

#1

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.


#2

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


#3

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.


#4

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.