2016-07-02 31 views
0

Ich versuche, einen Text aus einer Datei in einem anzuzeigen. Die Sache ist, dass die keine Zeilenumbrüche anzeigt. Wenn ich versuche, wie dies den Text in einer Art und Weise angezeigt werden: `Zeilenumbrüche in JTextArea

FileHandler fh = new FileHandler();     
String text = fh.loadFile("src/Files/info.txt");    

textArea = new JTextArea(text); 
textArea.setSize(350, 350); 
textArea.setVisible(true); 
textArea.setEditable(false); 
textArea.setFocusable(false); 
textArea.setBorder(null); 

this.add(textArea); 

Inhalt des text String ist Line one\nLine two\n Line three. Die TextArea- nur zeigt die folgende Ausgabe: Line one\nLine two\n Line three

Aber wenn ich den Text wie folgt manuell eingestellt:

String text = "Line one\nLine two\n Line three"` 

Die Zeilenumbrüche werden korrekt angezeigt.

+0

Vorsicht vor entflohenen Zeilenumbrüchen (Sie verwenden nicht "\ n" außerhalb Programmiersprachen, verwenden Sie tatsächlich Zeilenumbrüche) –

+0

Entweder hat info.txt Backslash-ns anstelle von tatsächlichen Zeilenumbrüche, oder FileHandler.loadFile wird Zeilenumbrüche in Backslash-n-Sequenzen. –

Antwort

0

Es gibt ein paar Möglichkeiten, dies zu erreichen, aber ich fand die einfachste die neue Linie Zeichen mit System neue Zeile Zeichen wie diese zu ersetzen war:

text = text.replaceAll("\\\\n", System.getProperty("line.separator")); 

So anstelle von Druck \ n als String es wird diese ersetzen, wenn mit einem bestimmten System neue Zeile Operator hier ist mein Beispiel.

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.ScrollPaneConstants; 
import javax.swing.border.EtchedBorder; 
import javax.swing.border.TitledBorder; 


    public class StackQuestions { 

     /** 
     * @param args the command line arguments 
     */ 
     public static void main(String[] args) { 
      try { 
       JPanel middlePanel = new JPanel(); 
       middlePanel.setBorder(new TitledBorder(new EtchedBorder(), "Display Area")); 
       String file =readFile("file.txt"); 


       // create the middle panel components 
       JTextArea display = new JTextArea(16, 58); 
       display.setEditable(false); // set textArea non-editable 
       display.setText(file); 
       JScrollPane scroll = new JScrollPane(display); 
       scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

       //Add Textarea in to middle panel 
       middlePanel.add(scroll); 

       // My code 
       JFrame frame = new JFrame(); 
       frame.add(middlePanel); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } catch (IOException ex) { 
       Logger.getLogger(StackQuestions.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 

     static String readFile(String fileName) throws IOException { 
      BufferedReader br = new BufferedReader(new FileReader(fileName)); 
      try { 
       StringBuilder sb = new StringBuilder(); 
       String line = br.readLine(); 

       while (line != null) { 
        line = line.replaceAll("\\\\n", System.getProperty("line.separator")); 
        sb.append(line); 
        //sb.append("\n"); 
        line = br.readLine(); 
       } 
       return sb.toString(); 
      } finally { 
       br.close(); 
      } 
     } 
    } 

Ich hoffe, das ohnehin in hilft :)

0

Wenn Sie den Inhalt der Datei ändern können, können Sie eine JTextPane stattdessen verwenden und formatieren Sie Ihren Text in HTML:

example.html:

<!DOCTYPE html> 
<html> 
<body> 

<h1>My Awesome heading</h1> 

<p>This text is so<br>awesome it requires multiple<br>line<br><br>breaks!</p> 

</body> 
</html> 

Denken Sie daran, den Inhaltstyp zu text/html einzustellen:

FileHandler fh = new FileHandler();     
String text = fh.loadFile("example.html"); 

JTextPane text = new JTextPane(); 
text.setContentType("text/html"); 
text.setText(text);   

Und Sie werden die folgenden in Ihrem JFrame erhalten:

My Awesome Überschrift

Dieser Text ist so
toll es erfordert mehrere
Linie

Pausen!