1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

JAVAFX - Popular tableview com filechooser

Bom dia, estou desenvolvendo uma aplicação em javafx que analisa dados em um txt e os organiza de varias maneiras...

Bem, eu fiz um filechooser para selecionar o arquivo e então ele deve abrir e popular a minha tableview só que eu não consigo adaptar o codigo que eu tinha antes sem o filechooser porque antes eu passava o endereço do arquivo direto.

Tenho uma classe Dados que analisa os dados do txt com o seguinte método construtor:

 public Dados(String nomeArquivo) {
        this.nomeArquivo = nomeArquivo;// construtor que manda os dados la pra cima 
    }

essa é a minha função dentro da classe Dados que lê os arquivos (quando eu passava o endereço direto)

public List<Time> ler() {

        try {

            br = new BufferedReader(new FileReader(nomeArquivo));


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

                analisa(linha.split(","));
            }

            ordena();

            int temp = 0;
            for (Time t : lstTimes) {
                t.getClassificacao();

            }

        } catch (Exception e) {

        } finally {  

            try {
                if (br != null) {
                    br.close();  

                }
            } catch (IOException ex) {

            }
        }

        return lstTimes;
    }

Eu populava a tabela dessa maneira passando o endereço direto

 dados = new Dados("src/main/resources/config/campeonato.txt");  
         times = dados.ler();

         lstObsTimes = FXCollections.observableList(times);
         tblVwTimes.setItems(lstObsTimes);
         tblVwTimes.getSelectionModel().selectFirst();

         colNome.setCellValueFactory(new PropertyValueFactory<Time, String>("nome"));
         colPontos.setCellValueFactory(new PropertyValueFactory<Time, String>("pontos"));
         colVitoria.setCellValueFactory(new PropertyValueFactory<Time, String>("vit"));
         colEmpate.setCellValueFactory(new PropertyValueFactory<Time, String>("emp"));
         colDerrota.setCellValueFactory(new PropertyValueFactory<Time, String>("der"));
         colGolP.setCellValueFactory(new PropertyValueFactory<Time, String>("golP"));
         colGolN.setCellValueFactory(new PropertyValueFactory<Time, String>("golN"));
         colSaldo.setCellValueFactory(new PropertyValueFactory<Time, String>("saldoGols"));
         colCla.setCellValueFactory(new PropertyValueFactory<Time, String>("classificacao"));

Agora eu quero clicar em um botão selecionar o arquivo e popular a tabela com as informações.

 @FXML
    private void btnAbrirClick(ActionEvent event) {

        Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();

        FileChooser fileChooser = new FileChooser();

        FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt");
        fileChooser.getExtensionFilters().add(extFilter);

        // COM ESSE CÓDIGO EU CONSIGO COLOCAR OS DADOS DA TABELA DENTRO DE UM TEXTAREA SOMENTE

        File file = fileChooser.showOpenDialog(stage);
        if (file != null) {
            txtArea.setText(readFile(file));

        }


    }

A classe fileReader que eu uso pra jogar os dados dentro da textArea

 private String readFile(File file) {
        StringBuilder stringBuffer = new StringBuilder();
        BufferedReader bufferedReader = null;

        try {

            bufferedReader = new BufferedReader(new FileReader(file));

            String text;
            while ((text = bufferedReader.readLine()) != null) {
                stringBuffer.append(text);
            }

        } catch (FileNotFoundException ex) {
        } catch (IOException ex) {
        } finally {
            try {
                bufferedReader.close();
            } catch (IOException ex) {
            }
        }

        return stringBuffer.toString();
    }

Eu tentei simplesmente passar o file com parâmetro para o meu construtor mas ele pede uma string e não sei como faço pra ele pedir um File como parâmetro.

Espero que vocês possam me ajudar. Obrigado.

  • readFile é a função e não a classe

    Leandro Santana   23 de set de 2015
  • O Construtor que você quer passar um File é o:

    public Dados(String nomeArquivo) {
            this.nomeArquivo = nomeArquivo;// construtor que manda os dados la pra cima 
     }
    
    //Se for, você pode passar um File, e como ele pede uma String você pega o getName() //do file
    Bruno Santiago   23 de set de 2015
  • fiz assim...

     dados = new Dados(file.getName());
            times = dados.ler();
    
            lstObsTimes = FXCollections.observableList(times);
            tblVwTimes.setItems(lstObsTimes);
            tblVwTimes.getSelectionModel().selectFirst();

    e dai listei as colunas, mas n apareceu nada na tabela...

    Leandro Santana   23 de set de 2015
  • mas na minha função que vai analisar tudo dentro da classe Dados eu preciso do caminho do arquivo pra dar certo... n tem nenhum GET que pegue o endereço do arquivo ?

    Leandro Santana   23 de set de 2015
  • Aaaa você quer o caminho, tenta pegar o getParentFile().toString ou getParent(), veja qual da certo, estou no celular e não da pra testar.

    Bruno Santiago   23 de set de 2015
Mostrar todos os 6 comentários>
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags javafx java ou faça a sua própria pergunta.