在JavaFX中将文本文件加载到TextArea中

时间:2015-07-27 15:20:57

标签: java text javafx textarea

我需要在javaFX中向TextArea显示一个文本文件。 我厌倦了使用这段代码:

@FXML
private void viewHistory(ActionEvent event) throws FileNotFoundException, IOException {
    HistoryController hc = new HistoryController();
    BufferedReader in;
    try {
        in = new BufferedReader(new FileReader("EmployeeUpdateHistory.txt"));
        String str;
        File f = new File("EmployeeUpdateHistory.txt");
        Scanner input = new Scanner(f);

        while ((str = in.readLine())!=null) {
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(getClass().getResource("/view/history.fxml"));
            loader.load();
            Parent root = loader.getRoot();
            Stage s1 = new Stage();
            HistoryController historyController = loader.getController();
            historyController.tfHistory.appendText(str);
            Scene s2 = new Scene(root);
            s1.setScene(s2);
            s1.setTitle("History");
            s1.setResizable(false);
            s1.show();
    }

    } catch (FileNotFoundException ex) {
        System.err.println(ex);
    }

}

但它只显示TextArea中的一行和Open多个阶段(等于行号)。

enter image description here

1 个答案:

答案 0 :(得分:0)

您创建和显示舞台的代码位于while循环中。因此它将为文件中的每一行执行。尝试将该代码移到循环之外,只需要在循环中附加文本即可。

这样的事情:

FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/view/history.fxml"));
loader.load();
Parent root = loader.getRoot();
Stage s1 = new Stage();
Scene s2 = new Scene(root);
s1.setScene(s2);
s1.setTitle("History");
s1.setResizable(false);

HistoryController historyController = loader.getController();
while ((str = in.readLine())!=null) {
    historyController.tfHistory.appendText(str);       
}

s1.show();