如何将文本文件阅读器输出回显到Swing文本窗格?

时间:2014-12-12 14:33:46

标签: java java.util.scanner

我是Java新手。我的程序应该执行以下操作:

使用文件浏览器,它将找到txt文件,然后使用scanner实用程序将其导入程序。然后,它会将文本内容输出到文本窗格中。

我设法编写扫描程序代码,读取txt文件并将结果输出到控制台,我还创建了打开文件浏览器的界面,找到文件,并将文件路径作为字符串。

问题是我无法将文本输出到文本窗格中。

代码:

public FileChoosing() throws FileNotFoundException {

    JFileChooser fileChooser = new JFileChooser();fc = new JFrame();
    fc.setBounds(100, 100, 800, 500);
    fc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //fileChooser.setBounds(5, 11, 753, 243);
    fc.getContentPane().add(fileChooser);
    fc.getContentPane().setLayout(null);
    JLabel lblFileName = new JLabel("New label");
    lblFileName.setFont(new Font("Tahoma", Font.PLAIN, 17));
    lblFileName.setBounds(10, 25, 764, 30);
    fc.getContentPane().add(lblFileName);

    JLabel lblFilePath = new JLabel("File Path");
    lblFilePath.setBounds(10, 11, 764, 14);
    fc.getContentPane().add(lblFilePath);

    JTextArea jtextArea = new JTextArea();
    jtextArea.setBounds(20, 66, 618, 329);
    fc.getContentPane().add(jtextArea);

    final JFileChooser fc= new JFileChooser();
    int response = fc.showOpenDialog(fc);


    if (response == JFileChooser.APPROVE_OPTION) {
    lblFileName.setText(fc.getSelectedFile().toString());
    String fp = lblFileName.getText();
    File textFile = new File(fp);
    Scanner  in = new Scanner (textFile);
    while(in.hasNextLine()){

            String line =in.nextLine();
            //System.out.println (line);
            jtextArea.setText(line);
    }
    in.close();
}

文件定位器

First window : File Locator

结果应该显示在第二个窗口中:

the result should be shown inside the 2nd window

2 个答案:

答案 0 :(得分:1)

setText将使用您传入其中的参数覆盖文本区域的内容。

如果要将文件内容加载到JTextArea中,则必须在使用setText之前构建字符串。

StringBuilder textBuilder = new StringBuilder();
while(in.hasNextLine()){
    String line = in.nextLine();
    textBuilder.append(line);
    textBuilder.append(System.lineSeparator()); // nextLine doesn't return the line separator
}
jtextArea.setText(textBuilder.getString());

答案 1 :(得分:0)

在java中,字符串是不可变的。问题是你总是覆盖行变量String line =in.nextLine();,最后只显示最后一行。

一种方法是String Builder:

        StringBuilder sb = new StringBuilder();

        while(in.hasNextLine()){
                    String line =in.nextLine();
                    sb.append(line).append("\n");
                    //System.out.println (line);

            }

        jtextArea.setText(sb.toString());