2010-04-27 94 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等的現有基礎結構,但您將負責檢測鼠標點擊。這同樣適用於懸停和將光標更改爲手形符號等。