我正在尝试使用安装了HTMLEditorKit的JEditorPane.getText()来解决不一致问题。
我可以使用JEditorPane.setText传递包含<的HTML字符串BR>标签,当我使用getText()时,这些新行正确显示为< BR取代。但是当用户在JEditorPane中输入换行符时,getText()返回一个“/ n”字符而不是< BR>标签。我的自定义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对我来说是新手,所以这就是我的想法。还有其他选择吗?还是资源?
谢谢!
答案 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现在可以在用户点击进入时创建新段落,这对我的目的来说已经足够了。谢谢你的帮助!