JEditorPane中的自动换行和系统字体

4

我想要创建一个大文本框,供用户输入内容。同时,我希望它使用默认的系统字体,以达到预期的外观和感觉。因此,我尝试使用默认构造函数的JEditorPane,该函数使用纯文本编码。

JEditorPane editorPane = new JEditorPane();
editorPane.setText(gettysburgAddress);

enter image description here

问题在于纯文本编码不会在每个单词的末尾换行,只有在字符用完时才会换行。

我尝试使用HTML编码,可以进行单词换行:

JEditorPane editorPane = new JEditorPane("text/html", "");
editorPane.setText(gettysburgAddress);

enter image description here

这里有一个单词换行功能,但它默认使用与系统不同的字体(在Mac OS X上是Helvetica,我不想要)。

我如何兼得:单词换行和系统默认字体?如果可能的话,我不需要任何特殊格式或其他东西,纯文本编码就可以。


JTextArea和JTextPane的自动换行。 - camickr
@camickr,那可能会起作用。将其转化为一个答案显示它(也许还可以展示如何使用JEditorPane来完成这个任务),我会接受它。 - Thunderforge
使用SimpleAttributeSet,例如这个例子 - trashgod
把它转化为一个答案展示出来 - 什么?我不会为你编写代码。如果你自己尝试过,现在应该有答案了。 - camickr
@camickr,我觉得你想要回答的声誉;这就是我所说的“将其转化为一个显示答案的答案”。如果你不感兴趣,我可以自己写答案。 - Thunderforge
@camickr 常规错误,请查看此处 OPs 回答中的链接。 - mKorbel
1个回答

7

如果只需要使用系统字体进行自动换行的JEditorPane,而且您不需要任何特殊的样式文本或图像,那么最好切换到JTextArea,它是一个用于处理纯文本的文本组件。它默认不进行自动换行,但很容易让它发生:

JTextArea textArea = new JTextArea();
textArea.setLineWrap(true); //Makes the text wrap to the next line
textArea.setWrapStyleWord(true); //Makes the text wrap full words, not just letters
textArea.setText(gettysburgAddress);

如果由于某种原因你必须使用JEditorPane,你需要对JEditorPane文本渲染方式进行一些更改。好的一面是,你有几种不同的方法可以选择,包括:

  • 设置编码为HTML(自动换行),并使用CSS指定字体(在此描述这里
  • 设置编码为RTF(自动换行),并修改底层RTFEditorKit的字体值(在此描述这里
  • 创建一个SimpleAttributeSet,并在添加字符串时使用它来指定应以该方式显示字符串(在此描述这里

Java7中存在一个bug,请查看以下链接(包含截图):请点击此处,或者访问我的链接:请点击此处 - mKorbel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接