4

我想创建一个大文本字段供用户输入内容。我还希望它使用默认的系统字体来匹配预期的外观。所以我尝试使用带有默认构造函数的 JEditorPane,它使用纯文本编码。

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

在此处输入图像描述

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

我尝试使用 HTML 编码,它会自动换行:

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

在此处输入图像描述

这有自动换行,但它默认为与系统默认字体不同的字体(Mac OS X 上的 Helvetica,我不想要。

我怎样才能两全其美:自动换行和系统默认字体?我不需要任何特殊格式或任何东西,所以如果可能的话,纯文本编码会做。

4

1 回答 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 并在添加字符串时使用它来指定它们应该以这种方式显示(在此处描述)
于 2013-05-20T02:50:06.820 回答