我正在尝试显示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"`
正确显示换行符。
答案 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);
中获得以下内容:
这篇文章太棒了,它需要多个轮
线中断!