开发者社区 问答 正文

用swing如何实现QQ聊天气泡效果

本人最近在做仿QQ的软件,想实现一下QQ的聊天气泡效果。目前我用的是JTextPane组件来做输入框以及消息展示框,实习了自动换行和追加文本,后面就不会了。有思路的说详细点,有代码的更好。

展开
收起
蛮大人123 2016-03-17 14:50:20 3959 分享 版权
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪
    public class JIMSendTextPane extends JTextPane {  
      
        // 内部类  
        // 以下内部类全都用于实现自动强制折行  
      
        private class WarpEditorKit extends StyledEditorKit {  
      
            private ViewFactory defaultFactory = new WarpColumnFactory();  
      
            @Override  
            public ViewFactory getViewFactory() {  
                return defaultFactory;  
            }  
        }  
      
        private class WarpColumnFactory implements ViewFactory {  
      
            public View create(Element elem) {  
                String kind = elem.getName();  
                if (kind != null) {  
                    if (kind.equals(AbstractDocument.ContentElementName)) {  
                        return new WarpLabelView(elem);  
                    } else if (kind.equals(AbstractDocument.ParagraphElementName)) {  
                        return new ParagraphView(elem);  
                    } else if (kind.equals(AbstractDocument.SectionElementName)) {  
                        return new BoxView(elem, View.Y_AXIS);  
                    } else if (kind.equals(StyleConstants.ComponentElementName)) {  
                        return new ComponentView(elem);  
                    } else if (kind.equals(StyleConstants.IconElementName)) {  
                        return new IconView(elem);  
                    }  
                }  
      
                // default to text display  
                return new LabelView(elem);  
            }  
        }  
      
        private class WarpLabelView extends LabelView {  
      
            public WarpLabelView(Element elem) {  
                super(elem);  
            }  
      
            @Override  
            public float getMinimumSpan(int axis) {  
                switch (axis) {  
                    case View.X_AXIS:  
                        return 0;  
                    case View.Y_AXIS:  
                        return super.getMinimumSpan(axis);  
                    default:  
                        throw new IllegalArgumentException("Invalid axis: " + axis);  
                }  
            }  
        }  
      
        // 本类  
      
        // 构造函数  
        public JIMSendTextPane() {  
            super();  
            this.setEditorKit(new WarpEditorKit());  
        }  
    }  
    2019-07-17 19:05:23
    赞同 展开评论
问答地址: