2

我试图在我的应用程序中实现聊天功能。我使用了 2 个 JEditorPane。一个用于保存聊天历史,另一个用于将聊天发送到上一个 JEditorPane。

JEdi​​torPane 是 text/html 类型。

我遇到的问题是,当我在字符之间放置多个空格时,它会被解析器自动删除,因为它是 HTML!

我怎样才能做到这一点,空间不被剥夺?

example: hello               world

becomes: hello world

我还必须解析 html 标签,以便可以将新消息添加到历史记录窗口。

有比使用 JEditorPane 更好的选择吗?如果我使用 JTextPane 会更容易实现吗?

我希望聊天框/窗格现在能够处理粗体的 URL 嵌入。

谢谢您,期待您的指导。

编辑:我试图用一个相关的字符替换“”。

newHome[1] = newHome[1].replace(" ", newChar) 

newChar 值应该是多少?

编辑:我正在尝试:

newHome[1] = newHome[1].replaceAll(" ", " ");

但它没有产生结果。有任何想法吗?

编辑:@Thomas - 谢谢!出于某种原因,我可以为您的答案张贴注释。

4

1 回答 1

3

使用 HTML 标记是在 Swing 文本组件中完成简单文本格式设置的一种快速方法。然而,这不是唯一的方法。

一种更复杂的方法是使用javax.swing.text.StyledDocument可以附加不同“样式”的 a (因此得名)。样式基本上是一组属性,例如,文本应该是粗体还是斜体,或者它应该具有什么颜色。

JTextPane提供了许多方便的方法来处理样式,它是它的子类,JEditorPane这意味着它应该无缝地集成到您现有的代码中。例如,要将 JTextPane 中的部分文本标记为粗体,您可以使用如下内容:

JTextPane textPane = new JTextPane();
Style bold = textPane.addStyle("bold", null);
StyleConstants.setBold(bold, true);

textPane.setText("I'll be bold.");

textPane.getStyledDocument().setCharacterAttributes(8, 4, bold, true);

类似地,您可以定义第二种样式,例如使用蓝色的下划线字体,您可以使用它来显示超链接。

不幸的是,缺点是您必须自己处理链接的机制。尽管您可以使用javax.swing.event.HyperlinkListener等人的现有基础架构,但您将负责检测鼠标点击。将光标悬停和将光标更改为手形符号等也是如此。

于 2010-04-28T12:53:56.387 回答