2010-06-27 30 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()方法。