输入密钥在JTextArea中不起作用

时间:2015-03-02 23:33:26

标签: java swing input jtextarea enter

我正在使用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();
    }
}

1 个答案:

答案 0 :(得分:2)

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