Java Swing不显示重复样式

时间:2010-06-27 07:28:17

标签: java user-interface swing

我正在处理一个项目的一部分问题。我想使用Java Swing显示一些表情符号,但它不允许我显示连续相同的样式:

这很好用:Smile Sad Grin

这不起作用:Smile Smile Smile

我正在使用Styled Document并且对它没什么经验。代码如下:

       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 Document是否具有某种属性,以便当我一个接一个地拥有相同的样式时它将无法正确显示它们?

编辑:每个文本都使用字符串标记符进行细分,我可以正确解析它,并应用相应的样式。

2 个答案:

答案 0 :(得分:1)

如果在连续的文本运行中有多个样式,则样式将被折叠。也就是说,具有相同样式的多行文本将合并为一行文本。听起来你只是根据风格显示图像。如果输出给定样式中字符数的图像而不仅仅是样式的存在,您将获得多个图像输出。

或者,不是为每个表情符号设置不同的样式,而是使用一般的“表情符号”样式,并根据文本呈现适当的图像。例如。 :-)用表情符号设计会呈现笑脸。并且:-) :-)将呈现两个表情。通过这样做,您可以在文档内容与呈现内容之间保持有意义的关系。

答案 1 :(得分:1)

另一种选择可能是使用JTextPane的insertIcon()方法。