在 HTMLDocument 支持的 JTextArea 中,Enter 键不会换行
Enter key doesn't make line break in JTextArea backed with HTMLDocument
下面的代码显示您可以编辑的文本,但是当您按下 ENTER
时不会出现换行符。
为什么以及如何解决?
这是因为HTMLDocument
被用作模型。如果使用默认模型,则会插入并显示换行符。
public class JTextAreaTry extends JFrame {
private HTMLDocument doc = new HTMLDocument();
{
try {
doc.insertString(0, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
+ "Phasellus tincidunt, neque ac lobortis viverra, nunc erat convallis leo, sit amet varius purus metus ac dolor. "
+ "Morbi pellentesque velit eu ornare pellentesque. "
+ "Sed lectus orci, sollicitudin non nunc in, vehicula mollis massa. "
+ "Sed a est ac arcu auctor interdum. "
+ "Duis at mauris pellentesque, semper massa nec, cursus nulla. "
+ "Fusce sed rhoncus nisl. Sed et sollicitudin mauris, a laoreet nulla. "
+ "Donec interdum volutpat orci, non placerat odio ultrices non.", null);
} catch (BadLocationException e) {
e.printStackTrace();
}
}
JTextArea textArea;
{
textArea = new JTextArea();
textArea.setDocument(doc); // comment this
textArea.setLineWrap(true);
add(textArea);
}
public static void main(String[] args) {
JFrame frame = new JTextAreaTry();
frame.setSize(800, 600);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
JTextArea
专为纯文本而不是样式文本设计。如果您打算使用 HTML-formatted 文本,那么请考虑使用 JEditorPane
/ JTextPane
,它具有 built-in 对 HTML 的支持(并且 line-breaking 按回车键)。示例如下:
JEditorPane ep = new JEditorPane();
HTMLEditorKit kit = new HTMLEditorKit();
HTMLDocument doc = new HTMLDocument();
ep.setEditorKit(kit);
ep.setDocument(doc);
kit.insertHTML(doc, doc.getLength(), "<b>Hello world!</b>", 0, 0, null);
下面的代码显示您可以编辑的文本,但是当您按下 ENTER
时不会出现换行符。
为什么以及如何解决?
这是因为HTMLDocument
被用作模型。如果使用默认模型,则会插入并显示换行符。
public class JTextAreaTry extends JFrame {
private HTMLDocument doc = new HTMLDocument();
{
try {
doc.insertString(0, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
+ "Phasellus tincidunt, neque ac lobortis viverra, nunc erat convallis leo, sit amet varius purus metus ac dolor. "
+ "Morbi pellentesque velit eu ornare pellentesque. "
+ "Sed lectus orci, sollicitudin non nunc in, vehicula mollis massa. "
+ "Sed a est ac arcu auctor interdum. "
+ "Duis at mauris pellentesque, semper massa nec, cursus nulla. "
+ "Fusce sed rhoncus nisl. Sed et sollicitudin mauris, a laoreet nulla. "
+ "Donec interdum volutpat orci, non placerat odio ultrices non.", null);
} catch (BadLocationException e) {
e.printStackTrace();
}
}
JTextArea textArea;
{
textArea = new JTextArea();
textArea.setDocument(doc); // comment this
textArea.setLineWrap(true);
add(textArea);
}
public static void main(String[] args) {
JFrame frame = new JTextAreaTry();
frame.setSize(800, 600);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
JTextArea
专为纯文本而不是样式文本设计。如果您打算使用 HTML-formatted 文本,那么请考虑使用 JEditorPane
/ JTextPane
,它具有 built-in 对 HTML 的支持(并且 line-breaking 按回车键)。示例如下:
JEditorPane ep = new JEditorPane();
HTMLEditorKit kit = new HTMLEditorKit();
HTMLDocument doc = new HTMLDocument();
ep.setEditorKit(kit);
ep.setDocument(doc);
kit.insertHTML(doc, doc.getLength(), "<b>Hello world!</b>", 0, 0, null);