【发布时间】:2015-05-03 11:48:36
【问题描述】:
我正在开发一个 Java Swing 应用程序。我在JScrollPane 里面有一个JTextArea 在一个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();
}
}
【问题讨论】:
-
“我要给 JTextArea 一个新的 HTMLDocument” 为什么?
JTextArea设计用于显示纯文本,而不是样式文本。为此使用JEditorPane... -
@MadProgrammer:不过,JTextArea API 并没有提到不能使用其他类型的 Documents(虽然我同意,应该使用 PlainDocument)。
-
请注意,(一个)HTML(渲染应用程序)通常会忽略换行符。
-
@HovercraftFullOfEels 可能不是,没有人说你不能将
StyledDocument应用于JTextField,但这也不起作用;) -
@MadProgrammer 我尝试了一个 JTextPane,结果相似,但它不允许自动换行。我最初使用 JTextArea 是因为我对 Swing 不是很熟悉,而且它似乎可以很好地与 HTMLDocument 配合使用。
标签: java swing input jtextarea enter