输入键在 JTextArea 中不起作用

Enter key not working in JTextArea

我正在开发 Java Swing 应用程序。我有一个 JTextArea 里面的 JScrollPane 里面的 JTabbedPane 里面的 JPanel。我可以输入 JTextArea,键盘上的每个键都具有预期的效果,但回车键除外。

制表符和空格工作正常。当我按下 enter 键,然后在启用自动换行的情况下键入到行尾时,在我键入 enter 键的地方该行被断开,这让我相信问题出在 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 - 它不适用于样式化文档。您必须将 JTextPaneHTMLEditorKit 一起使用,以便它知道它是 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