[RESOLVIDO] Fazer um filtro para a leitura do JCombobox

10 respostas Resolvido
java
PapaiLu

Estou trabalhando num projeto de jogo e preciso fazer um filtro.
Em um arquivo texto, são separadas palavras para ocupar o JCombobox de CATEGORIAS.

Agora estas palavras devem ser separadas não só por um NÍVEL (Fácil, Medio ou Dificil), mas também pelo conteúdo selecionado no JCombobox que são as categorias (Informática, Animais domésticos, etc).

O contéudo do arquivo de texto (.txt)

NOTEBOOK#Informática #PC de colo #Computador portátil #Tem as mesmas características de um PC #1
PENTIUM #Informática um processador da Intel#Famoso pela velocidade#2
WINDOWS #Informática #Sistema Operacional#Soft mais piratado#Tela azul #1
ANDROID #Informática #Sis.Op. comum hoje#Usado em celulares#Baseado em Java#2

Código para contar os níveis e separar as categorias

public void ContarNiveis() throws FileNotFoundException {
    qtdeNiveis = 0;
    facil = 0;
    medio = 0;
    dificil = 0;
    FileReader leitor = new FileReader(ArquivoDePalavras);
    try (BufferedReader leitorBuf = new BufferedReader(leitor)) {
        NivelArquivo.clear();               //limpa o temporaio que aramzena o nível
        String linha = null;                //prepara para as leituras do arquivo
        while ((linha = leitorBuf.readLine()) != null) {//ler até o final do arquivo
            String colunas[] = linha.split("#"); //lê uma linha do arquivo
            
            Object[] filtro = ComboCategoria.getSelectedObjects();
            
            NivelArquivo.add(colunas[5]);   //coloca o 'split' na coluna 5
            switch ( Integer.parseInt((String) NivelArquivo.get(qtdeNiveis)) ) {
            case 1:
                facil++;
                break;
            case 2:
                medio++;
                break;
            case 3:
                dificil++;
                break;
            default:
                break;
            }
            lblFacil.setText(Integer.toString(facil));
            lblMedio.setText(Integer.toString(medio));
            lblDificil.setText(Integer.toString(dificil));
            qtdeNiveis++;
        }

Tela

  • Alí onde lemos Todas é o JCombobox com as categorias (5)
  • Ao lado os botões de nível (Fácil, Médio e Difícil).

Exemplo: quero que mostre quantas palavras há SÓ na categoria INFORMÁTICA.

10 Respostas

rodriguesabner
if (combo.equals("Informática"){
//Mostra o .txt de informática
}
PapaiLu

kk. Obrigado, mas não é só isso Abner.
Preciso do conteúdo que está no TXT.

Quero que carregue todas as palavras da categorias que eu selecionar no combo.

rodriguesabner

Achei que vc já sabia abrir arquivo .txt. Dá uma olhada nesse link:

Pra contar as linhas:


File arquivoLeitura = new File("Arquivo.txt");
LineNumberReader linhaLeitura = new LineNumberReader(new FileReader(arquivoLeitura));
linhaLeitura.skip(arquivoLeitura.length());
int qtdLinha = linhaLeitura.getLineNumber();
PapaiLu

Eu ja estou lendo o arquivo TXT, mas não sei ccomo separar (FILTRAR) com o conteúdo do Combo.
A rotina que tenho aqui ja me mostra a quantidade de CATEGORIAS no TXT
e ainda me da a qtde de categorias por nível, mas não sei como FILTRAR quando mudo o combo para uma das categorias. Entendeu?

V

Acho que você vai ter que criar um ActionListener para seu Combobox, ai o carregamento das palavras pode ser condicionado pelo getSelectedItem().

PapaiLu

vixi.

obrigado. mas n sei como.
:frowning:

PapaiLu

Hei Abner é mais ou menos isso???

ComboCategoria.addActionListener(new ActionListener() {
    String Filtro = null;
    public void actionPerformed(ActionEvent evt) {  
        
        Filtro = (String) ComboCategoria.getSelectedItem();
        
    }
});

Inseri no final (dentro) do construtor da classe.

rodriguesabner
Solucao aceita

Cria um evento na sua combobox: itemStateChanged:

private void suaComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {
        if (combo.getSelectedItem().equals("Informática") {
           campoCategorias.setText(quantidade);
        }
    }
PapaiLu

Hei Abner, fiz o addActionListener do Combo,
Fiz uns IFs pra isolar a categorria e parece que ta funcionando.

Obrigado por hora. Deus abençoe vc.

PapaiLu
public void ContarNiveis() throws FileNotFoundException {
        contaNiveis = 0;
        facil = 0;
        medio = 0;
        dificil = 0;
        int QNivel = 0;
        FileReader leitor = new FileReader(ArquivoDePalavras);
        try (BufferedReader leitorBuf = new BufferedReader(leitor)) {
            NivelArquivo.clear();               //limpa o temporaio que aramzena o nível
            String linha = null;                //prepara para as leituras do arquivo
            while ((linha = leitorBuf.readLine()) != null) {//ler até o final do arquivo
                String colunas[] = linha.split("#"); //lê uma linha do arquivo
                
                if (Filtro == "Todas") {
                    NivelArquivo.add(colunas[5]);   //coloca o 'split' na coluna 5
                    switch ( Integer.parseInt((String) NivelArquivo.get(contaNiveis)) ) {
                    case 1:
                        facil++;
                        break;
                    case 2:
                        medio++;
                        break;
                    case 3:
                        dificil++;
                        break;
                    default:
                        break;
                    }
                    
                    lblFacil.setText(Integer.toString(facil));
                    lblMedio.setText(Integer.toString(medio));
                    lblDificil.setText(Integer.toString(dificil));

                    contaNiveis++;
                    
                } else {
                    String NomeCategoria = colunas[1]; 
                    if (NomeCategoria.equals(Filtro)) {
                        NivelArquivo.add(colunas[5]);   //coloca o 'split' na coluna 5
                        switch ( Integer.parseInt((String) NivelArquivo.get(contaNiveis)) ) {
                        case 1:
                            facil++;
                            break;
                        case 2:
                            medio++;
                            break;
                        case 3:
                            dificil++;
                            break;
                        default:
                            break;
                        }
                        lblFacil.setText(Integer.toString(facil));
                        lblMedio.setText(Integer.toString(medio));
                        lblDificil.setText(Integer.toString(dificil));
                
                        contaNiveis++;
                    }
                }
                
            }
            
            lblnPalavras.setText(Integer.toString( facil + medio + dificil ));    //Integer.toString(facil + medio + dificil));
            
            if (facil <= 0) {
                btnPalavraFacil.setEnabled(false);//desativa botão caso não tenha palavras neste nivel
                btnPalavraFacil.setToolTipText("Não há palavras registradas nesta categoria");
            } else {
                btnPalavraFacil.setEnabled(true);
                btnPalavraFacil.setToolTipText("Existem " + lblFacil.getText() + " palavras registradas");
            }
            if (medio <= 0) {
                btnPalavraMedia.setEnabled(false);//desativa botão caso não tenha palavras neste nivel
                btnPalavraMedia.setToolTipText("Não há palavras registradas nesta categoria");
            } else {
                btnPalavraMedia.setEnabled(true);
                btnPalavraMedia.setToolTipText("Existem " + lblMedio.getText() + " palavras registradas");
            }
            if (dificil <= 0) {
                btnPalavraDificil.setEnabled(false);//desativa botão caso não tenha palavras neste nivel
                btnPalavraDificil.setToolTipText("Não há palavras registradas nesta categoria");
            } else {
                btnPalavraDificil.setEnabled(true);
                btnPalavraDificil.setToolTipText("Existem " + lblDificil.getText() + " palavras registradas");
            }
        }
        catch(IOException ex) {
            System.out.println("Erro: "+ ex.toString());}
    }
Criado 15 de janeiro de 2019
Ultima resposta 15 de jan. de 2019
Respostas 10
Participantes 3