0

所以,我有这段代码应该从“Questions.txt”中读回文本并将其显示在 JTextArea 中,并带有保存任何编辑的选项,但它只读回最后一行。它出什么问题了?

package secondgui;

public class MainGUI {
public static void main (String [] args) {
    SecondGUI phillip = new SecondGUI(); 
    phillip.repaint();

}
}




 package secondgui;

 import java.awt.event.*;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.Scanner;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import javax.swing.*;

 public class SecondGUI extends JFrame implements ActionListener {

/**
 * @param args the command line arguments
 */
private JButton save = new JButton("Save Edits");
private JTextArea edit = new JTextArea();

public SecondGUI() {
    this.setVisible(true);
    this.setSize(600, 600);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);

    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
    this.add(panel);

    JLabel label = new JLabel("Please edit the question(s) below"
            + " as you see fit");

    panel.add(save);

    save.addActionListener(this);


    panel.add(label);
    edit.setLineWrap(true);

    try { 
        Scanner b = new readFile().openFile();
        while (b.hasNextLine()) {
            edit.setText(b.nextLine() + "\n");
        }
    } catch (Exception e) {}

    JScrollPane scrollyBar = new JScrollPane(edit);
    scrollyBar.setBounds(150, 150, 250, 100);
    scrollyBar.setSize(300, 300);

    panel.add(scrollyBar);
    this.repaint();
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    if (e.getSource() == save) {
        PrintWriter out;
        FileWriter outFile;
        try {
            outFile = new FileWriter("Questions.txt");
            out = new PrintWriter(outFile);
            out.println(edit.getText());
            out.close();
            outFile.close();
        } catch (IOException ex) {
            Logger.getLogger(SecondGUI.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

 }
 }

 package secondgui;

import java.io.*;
import java.util.*;


public class readFile {

private Scanner x = new Scanner(System.in);

public Scanner openFile() {
    try {
        x = new Scanner(new File("Questions.txt"));

    } catch (Exception e) {
        System.out.println("Could not find file");

    }
    return x;
}

public void readFile() {
    while (x.hasNext()) {
        x.next();
    }
}

public void closeFile() {
    x.close();
}
}
4

2 回答 2

1

违规行是:edit.setText(b.nextLine() + "\n"); 您应该附加下一行,而不是设置文本。如果我没记错的话,有一种edit.append()方法可以使用。

查看JavaDocs以获取有关JTextArea.

于 2012-11-20T17:46:55.373 回答
0

不管你的最后一个问题是什么,我认为你的readfile()机制充其量是有问题的。这:

 private Scanner x = new Scanner(System.in);
 try {
        x = new Scanner(new File("Questions.txt"));

    } catch (Exception e) {
        System.out.println("Could not find file");
    }

看起来很狡猾。如果遇到错误,扫描仪默认使用标准输入。还有这个:

public void readFile() {
    while (x.hasNext()) {
        x.next();
    }
}

似乎只是迭代文件而不做任何事情。我会阅读有关阅读文件的教程,并且(至少目前)如果其中任何一个失败,则抛出显式异常。

于 2012-11-20T17:50:02.547 回答