如何使用带有鼠标事件的按钮在javaFx中逐行读取文件

时间:2015-04-15 23:45:55

标签: javafx

当我按下此按钮时,它应该读取文件的下一行,每次按下它。为什么不使用这段代码。

btnFrw.setOnMousePressed(e -> {
    try {
        FileReader fr = new FileReader(file); //read 'file'
        br = new BufferedReader(fr); //read 'file'
        String line = "";
        while ((line = b.readLine()) != null) {
            line = br.readLine();

            StringTokenizer st = new StringTokenizer(line, ",");
            txtID.setText(st.nextToken());
            txtG.setText(st.nextToken());
            txtBP.setText(st.nextToken());
            txtD.setText(st.nextToken());
            txtCons.setText(st.nextToken());
            txtSP.setText(st.nextToken());
        }
    } catch(Exception k) {
        System.out.println("Reading file.");
    }
});

好吧所以我想出来包括一个while循环。但那仍然没有做我需要的。只需单击一下,它将读取所有行并将文本区域设置为当前行。我需要的是每次单击按钮时移动到新行,并使用String tokenizer将文本区域设置为该行。

2 个答案:

答案 0 :(得分:0)

您可以使用字符串数组分别存储每一行​​,然后在按钮单击时显示它们,而不是使用String来读取行。这是代码

String[] lineList = null;


        try{
        FileReader fr = new FileReader(file);//read 'file'
        br = new BufferedReader(fr);//read 'file'
        String line = "";

        int lines = 0;
        while (br.readLine() != null) {
            lines++;
        }
        lineList = new String[lines];
        int i = 0;
        while ((br.readLine()) != null) {
            lineList[i] = br.readLine();
            i++;
        }

        btn.setOnAction(new EventHandler<ActionEvent>() {

            int loop = 0;

            @Override
            public void handle(ActionEvent event) {
                System.out.println(lineList[loop]);
                loop++;
            }
        });

答案 1 :(得分:0)

将它们读入列表可能更容易,然后您甚至可以使用Files.readAll

    final List<String> lines;
    try {
         lines = Files.readAllLines(file.toPath());
    } catch (IOException ex) { 
        return;
    }
    //need final object since we use it in lambda
    final AtomicInteger i = new AtomicInteger(0);
    Button btnFrw = new Button("clk me");
    btnFrw.setOnAction(e ->{
        if (i.get() < lines.size())
            System.out.println(i.get()+" "+lines.get(i.getAndIncrement()));
        else 
            System.out.println("No more lines");
    });