2010-06-27 73 views
2

我正在處理的項目的一部分存在問題。我想用的Java Swing顯示一些表情符號,但它不會讓我顯示連續相同的風格:Java Swing未顯示的重複樣式

這工作得很好:微笑傷心咧嘴

這不起作用:笑臉笑臉微笑

我正在使用樣式文檔,對它幾乎沒有經驗。代碼如下:

 public static void addStylesToDocument(StyledDocument doc) { 
     //Initialize some styles. 
     ImageIcon laugh = new ImageIcon("laugh.gif"); 
     ImageIcon sad = new ImageIcon("sad.gif"); 
     ImageIcon tongue = new ImageIcon("tongue.gif"); 
     ImageIcon smile = new ImageIcon("smile.gif"); 
     ImageIcon cry = new ImageIcon("cry.gif"); 

     Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE); 

     Style regular = doc.addStyle("regular", def); 
     StyleConstants.setFontFamily(def, "SansSerif"); 

     Style s = doc.addStyle("laugh", def); 
     StyleConstants.setIcon(s, laugh); 

     Style sads = doc.addStyle("sad", regular); 
     StyleConstants.setIcon(sads,sad); 


     s = doc.addStyle("tongue", regular); 
     StyleConstants.setIcon(s,tongue); 


     s = doc.addStyle("smile", regular); 
     StyleConstants.setIcon(s,smile); 


     s = doc.addStyle("cry", regular); 
     StyleConstants.setIcon(s,cry); 
    } 

^添加樣式我的文檔

 for (i=0;i<typeOfText.size();i++){ 
      System.out.println(parsedText.get(i) + " " + typeOfText.get(i) + " " + i + " " + doc.getLength()); 
      doc.insertString(doc.getLength(),parsedText.get(i),doc.getStyle(typeOfText.get(i))); 
     } 

^應用樣式解析文本。

所以我的問題是:Styled文檔是否有一定的屬性,以便當我有相同的樣式一個接一個時,它不會正確顯示它們?

編輯:每個文本是用String Tokenizer分解,我得到它解析正確,並適用適當的風格。

回答

1

如果連續運行文本有多個樣式,則樣式將摺疊。也就是說,具有相同樣式的多次文本將被合併爲一次文本運行。這聽起來像你正在顯示一個基於風格的圖像。如果您輸出的圖像是指定樣式中的字符數量,而不僅僅是樣式的存在,您將獲得多個圖像輸出。

或者,不是每個表情符號都有獨特的樣式,而是具有一般的「表情符號」樣式,並根據文本呈現適當的圖像。例如。 :-)與表情符號一起呈現笑臉。和:-) :-)會呈現兩個笑臉。通過這樣做,您可以在文檔內容和呈現內容之間保持有意義的關係。

1

另一種選擇可能是使用JTextPane的insertIcon()方法。