JTextArea中的换行符

时间:2016-07-02 09:56:21

标签: java jtextarea line-breaks

我正在尝试显示JTextArea中文件的文字。问题是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);

text字符串的内容为Line one\nLine two\n Line three。 TextArea仅显示以下输出: Line one\nLine two\n Line three

但如果我手动设置这样的文字:

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

正确显示换行符。

2 个答案:

答案 0 :(得分:0)

有几种方法可以实现这一点,但我发现最简单的方法是用系统换行字符替换新行字符,如下所示:

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

因此,不是将\ n作为字符串打印,而是替换那些遇到指定系统的新行操作符,这是我的例子。

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();
            }
        }
    }

我希望无论如何这都有帮助:)

答案 1 :(得分:0)

如果您可以更改文件内容,则可以使用return (Table<R>) ((Table<?>) tableOfRecord()); 代替JTextPane格式化文字:

example.html的:

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>

text/html

您将在FileHandler fh = new FileHandler(); String text = fh.loadFile("example.html"); JTextPane text = new JTextPane(); text.setContentType("text/html"); text.setText(text); 中获得以下内容:

My Awesome heading

这篇文章太棒了,它需要多个轮
线中断!