Enter键在JTextArea中不起作用
问题描述:
我正在研究Java Swing应用程序。我在JPanel
内的JTabbedPane
内的JScrollPane
内有JTextArea
。我可以输入JTextArea
,除了回车键之外,键盘上的每个键都具有所需的效果。Enter键在JTextArea中不起作用
标签和空格正常工作。当我按下回车键,然后在启用自动换行功能的情况下输入行的末尾,在输入回车键的地方,行会被打破,导致我相信问题在于JTextArea
如何显示文本。我给JTextArea
一个新的HTMLDocument
。请注意,当我不给JTextArea
一个新的HTMLDocument
,输入密钥工作得很好。
简单的代码重现问题:
import javax.swing.*;
import javax.swing.text.html.HTMLDocument;
import java.awt.*;
public class Driver extends JFrame {
public Driver() {
setLayout(new GridLayout(1, 1));
JTabbedPane tabbedPane = new JTabbedPane();
add(tabbedPane);
JTextArea textArea = new JTextArea(new HTMLDocument());
textArea.setLineWrap(true);
JScrollPane scrollPane = new JScrollPane(textArea);
tabbedPane.addTab("No enter key!", scrollPane);
pack();
getContentPane().setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(640, 480);
setVisible(true);
setFocusable(true);
}
public static void main(String[] args) {
new Driver();
}
}
答
JTextArea
不明白HTMLDocument
- 它不是为风格的文档。您将必须使用JTextPane
和HTMLEditorKit
,因此它知道它是HTML。出于某种原因,您不能提供自己的文档,但是如果您从组件中获得该文档,那么它可以正常工作。
final HTMLEditorKit htmlKit = new HTMLEditorKit();
final JTextPane textPane = new JTextPane();
textPane.setEditorKit(htmlKit);
textPane.setEditable(true);
JScrollPane scrollPane = new JScrollPane(textPane);
Document doc = textPane.getDocument();
System.out.println(doc.getClass().getName()); // It's an HTML Document
+0
现在来想一下如何让JTextPane做单词换行......但这是另一个线程的另一个问题。 – DethRaid 2015-03-03 22:25:55
*“我给JTextArea一个新的HTMLDocument”*为什么? 'JTextArea'专为显示纯文本而不是样式文本而设计。使用'JEditorPane'... ... – MadProgrammer 2015-03-02 23:35:39
@MadProgrammer:尽管如此,JTextArea API没有提及其他类型的文档无法使用(尽管我同意,PlainDocument是应该使用的)。 – 2015-03-02 23:37:15
请注意,HTML(渲染应用程序)通常会忽略新的行字符。 – 2015-03-02 23:48:33