带有HTMLEditorKit的JEditorPane返回换行符而不是<br/>标签

时间:2014-11-09 03:38:38

标签: java jeditorpane documentfilter htmleditorkit

我正在尝试使用安装了HTMLEditorKit的JEditorPane.getText()来解决不一致问题。

我可以使用JEditorPane.setText传递包含&lt;的HTML字符串BR&GT;标签,当我使用getText()时,这些新行正确显示为&lt; BR取代。但是当用户在JEditorPane中输入换行符时,getText()返回一个“/ n”字符而不是&lt; BR&GT;标签。我的自定义HTML解析器无法区分用户“/ n”字符和添加的“/ n”字符 - 看似 - 使HTML字符串看起来很漂亮。一个例子:

如果用户输入了一些文本,JEditorPane.getText()过程将返回如下内容:

<html>
  <head>

  </head>
  <body>
    I've written some text! Indeed so much text that this line is probably 
    going to word wrap when I run the getText procedure!

And now I just hit enter a few times! I wonder what will happen if it wraps 
    another time? WHAM.
And I'll hit enter once more for good measure.
  </body>
</html>

而我希望这会显示为:

<html>
  <head>

  </head>
  <body>
    I've written some text! Indeed so much text that this line is probably 
    going to word wrap when I run the getText procedure!<br><br>And now I 
    just hit enter a few times! I wonder what will happen if it wraps 
    another time? WHAM.<br>And I'll hit enter once more for good measure.
  </body>
</html>

有没有办法让&lt; BR&GT;当用户点击进入时插入getText字符串?我的第一次尝试是使用documentFilter,但文档说我只是大声使用过滤器中的insertString或filterBypass,因此我不能使用setText(“&lt; br&gt;”)路由。经过大量阅读,我认为另一种选择是扩展HTMLEditorKit并覆盖读取过程? JTextComponents对我来说是新手,所以这就是我的想法。还有其他选择吗?还是资源?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用DocumentListener并跟踪\ n插入。在insert上为插入的\ n创建一个虚拟元素,并替换它的外部html(使用HTMLDocument的setOuterElement()方法)。

请参阅autoreplace smiles here

的示例

答案 1 :(得分:0)

知道了。

我的初始化看起来像这样:

HTMLEditorKit kit = new HTMLEditorKit();
HTMLDocument doc = new HTMLDocument();
editor_pane.setEditorKit(kit);
editor_pane.setDocument(doc);

但似乎这还不足以使文档处理所有用户输入。不幸的是,正确处理 StyledEditorKit.BoldAction StyledEditorKit.ItalicAction 就足够了,这就是为什么我不认为问题出在初始化中。

HTMLEditorKit kit = new HTMLEditorKit();
editor_pane.setEditorKit(kit);
editor_pane.setContentType("text/html");

我按照@StanislavL共享文章的建议将初始化更改为上面的内容。通过此更正,JEditorPane现在可以在用户点击进入时创建新段落,这对我的目的来说已经足够了。谢谢你的帮助!