JEdi​​torPane和系统字体中的自动换行

Thu*_*rge 4 java swing jeditorpane java-7

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

JEditorPane editorPane = new JEditorPane();
editorPane.setText(gettysburgAddress);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

我尝试使用HTML编码,这个词包装:

JEditorPane editorPane = new JEditorPane("text/html", "");
editorPane.setText(gettysburgAddress);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

我怎样才能充分利用这两个方面:自动换行和系统默认字体?我不需要任何特殊的格式或任何东西,所以如果可能的话,纯文本编码将会做.

Thu*_*rge 6

如果所需要的只是一个使用系统字体的单词包装的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);
Run Code Online (Sandbox Code Playgroud)

如果您出于某种原因绝对必须使用JEditorPane,则必须卷起袖子并对JEditorPane渲染文本的方式进行一些更改.从好的方面来说,您有几种不同的方法可供选择.您可以:

  • 将编码设置为HTML(哪个单词换行)并使用CSS指定字体(此处描述)
  • 将编码设置为RTF(哪个词包装)并修改底层RTFEditorKit的字体值(此处描述)
  • 创建一个SimpleAttributeSet并在添加字符串时使用它来指定它们应该以这种方式显示(在此处描述)