【问题标题】:Word Wrap in JEditorPane and System FontJEdi​​torPane 和系统字体中的自动换行
【发布时间】:2013-05-20 00:44:28
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • JTextArea 和 JTextPane 自动换行。
  • @camickr,这可能会奏效。把它变成一个显示它的答案(也许还显示如何使用 JEditorPane 来完成),我会接受它。
  • 使用SimpleAttributeSet,代表example
  • Turn it into an answer showing it - 什么?我不会为你编写代码。如果您自己尝试过,您现在应该有答案了。
  • @camickr,我想你会想要一个答案的声誉;这就是我所说的“把它变成一个显示它的答案”的意思。如果你不感兴趣,我可以自己写答案。

标签: java swing java-7 jeditorpane


【解决方案1】:

如果只需要使用系统字体的自动换行的 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 指定字体(描述为here
  • 将编码设置为 RTF(自动换行)并修改底层 RTFEditorKit 的字体值(描述为here
  • 创建一个 SimpleAttributeSet 并在添加字符串时使用它来指定它们应该以这种方式显示(描述为here

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 2011-06-06
  • 1970-01-01
相关资源
最近更新 更多