我正在使用Java Swing应用程序。我在JTextArea
内的JScrollPane
内的JTabbedPane
内有一个JPanel
。我可以输入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();
}
}
答案 0 :(得分:2)
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