So, i have this code that is supposed to read back the text from “Questions.txt” and display it in JTextArea with the option to save any edits but it only reads back the last line. Whats wrong with it?
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();
}
}
The offending line is:
edit.setText(b.nextLine() + "\n");You should be appending the next line, not setting the text. If I remember correctly, there is aedit.append()method that you can use.Check out the JavaDocs for more information about the
JTextArea.