2010-04-27 93 views
2

即时尝试在我的应用程序中实现聊天功能。我已经使用了2个JEditorPane。一个用于保存聊天记录,另一个用于向以前的JEditorPane发送聊天。Java JEditorPane格式

JEditorPane是text/html类型。

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

我该如何做到这一点,空间不被剥离?

example: hello    world 

becomes: hello world 

另外我不得不解析html标签,以便新消息可以添加到历史窗口。

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

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

谢谢你,期待你的指导。

编辑︰即时尝试替换“”与relavent字符。

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

应该是newChar的值是什么?

编辑:我尝试:

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

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

编辑:@Thomas - 谢谢!出于某种原因,我可以在你的答案中发布一条便条。

+0

为什么使用HTML?您可以使用样式进行文本格式设置。 – Thomas 2010-04-27 12:47:52

+0

,这样我就可以在需要的地方用粗体标出文字。我不懂你在说什么。你的意思是使用JTextPane吗? – iTEgg 2010-04-27 12:48:44

+1

是的,如果您使用JTextPane,则可以将字符和字符属性附加到StyledDocument以执行所需的格式设置。 – Thomas 2010-04-27 13:21:25

回答

3

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

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

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等的现有基础结构,但您将负责检测鼠标点击。这同样适用于悬停和将光标更改为手形符号等。