最近一段时间在做一个类似QQ聊天的工具。但是在其中遇到一个问题。
在做气泡聊天的时候,原本已经用Jtextarea已经实现。后来因为使用到emoji表情,需要将组件改为JtextPane来
实现插入图片,改组件后出现了这样的问题
1:使用jtextpane的时候当输入的全部都是英文和数字的时候是不会自动换行。只有中文的时候才会
当出现这样的问题后上网搜索到的解决方案是:
textField.setEditorKit(new HTMLEditorKit() { private static final long serialVersionUID = 3632670469611941371L; @Override public ViewFactory getViewFactory() { return new HTMLFactory() { public View create(Element e) { View v = super.create(e); if (v instanceof InlineView) { return new InlineView(e) { public int getBreakWeight(int axis, float pos, float len) { return GoodBreakWeight; } public View breakView(int axis, int p0, float pos, float len) { if (axis == View.X_AXIS) { checkPainter(); int p1 = getGlyphPainter().getBoundedPosition(this, p0, pos, len); if (p0 == getStartOffset() && p1 == getEndOffset()) { return this; } return createFragment(p0, p1); } return this; } }; } else if (v instanceof ParagraphView) { return new ParagraphView(e) { protected SizeRequirements calculateMinorAxisRequirements(int axis, SizeRequirements r) { if (r == null) { r = new SizeRequirements(); } float pref = layoutPool.getPreferredSpan(axis); float min = layoutPool.getMinimumSpan(axis); r.minimum = (int) min; r.preferred = Math.max(r.minimum, (int) pref); r.maximum = Integer.MAX_VALUE; return r; } }; } return v; } }; } });
虽然按照上面的方式能解决换行问题。但是会出现如下问题:
1:当别人发送\n换行的时候,接收不会自动换行
2:获取方式不能直接通过gettext获取,获取的只是一段html代码。(可通过jtextpane.getdocument.gettext(0,jtextpane.getdocument.length()) 获取)
通过上面的方法达到想要的效果,后来在别人博客中看到一段代码:
import javax.swing.JTextPane; import javax.swing.text.AbstractDocument; import javax.swing.text.BoxView; import javax.swing.text.ComponentView; import javax.swing.text.Element; import javax.swing.text.IconView; import javax.swing.text.LabelView; import javax.swing.text.ParagraphView; import javax.swing.text.StyleConstants; import javax.swing.text.StyledEditorKit; import javax.swing.text.View; import javax.swing.text.ViewFactory; /** * 该类是真正实现超长单词都能自动换行的 JTextPane 的子类 * Java 7 以下版本的 JTextPane 本身都能实现自动换行,对 * 超长单词都能有效,但从 Java 7 开始读超长单词就不能自动 * 换行,导致 JTextPane 的实际宽度变大,使得滚动条出现。 * 下面的方法是对这个 bug 的较好修复。 * * Created by dolphin on 15-2-3. */ 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()); } }
代码来源:http://www.iteye.com/topic/1138181
可解决英文和数字不自动换行问题
相关推荐
用java swing的JTextArea很容易实现自动换行,但用Textarea却很难实现换行,所以发到网上供大家参考,大家一起学习学习!!!
JTable的自动换行。挺好用的。里面还可以设置字体大小。分享一下。
主要介绍了Jlabel实现内容自动换行简单实例,具有一定借鉴价值,需要的朋友可以参考下
java swing漂亮界面 超酷 javaswing教程
基于Java Swing + MySQL的图书管理系统,优秀Java毕业设计系统,小白必看! 基于Java Swing + MySQL的图书管理系统,优秀Java毕业设计系统,小白必看! 基于Java Swing + MySQL的图书管理系统,优秀Java毕业设计系统...
Java Swing是目前图形界面设计的主流开发工具,《Java Swing图形界面开发与案例详解[1]》从实用的角度出发,通过大量实例全面介绍Java Swing中各种组件的应用及图形界面的开发技术。《Java Swing图形界面开发与案例...
(java swing毕业设计)学生信息管理(文档+视频+源码)(java swing毕业设计)学生信息管理(文档+视频+源码)(java swing毕业设计)学生信息管理(文档+视频+源码)(java swing毕业设计)学生信息管理(文档+视频+源码)(java ...
java Swing多Jpanel仿安卓苹果桌面动态切换滑动效果
java swing 文本框自动补全示例,数据源默认当前系统字体,便于测试,单文件一看就懂...........
java swing 教程 精通javaswing
java swing漂亮软件界面 超酷 以及java swing教程
基于Java Swing的物业管理系统源码+数据库(95分以上课程设计).zip 已获高分通过项目,代码完整下载即用,无需修改确保可以运行。 基于Java Swing的物业管理系统源码+数据库(95分以上课程设计).zip 已获高分...
(java swing毕业设计)酒店管理系统(ppt+ER图+流程图+需求背景数据库+架构说明有lun文视频源码齐全)(java swing毕业设计)酒店管理系统(ppt+ER图+流程图+需求背景数据库+架构说明有lun文视频源码齐全)(java swing毕业...
1、JAVA Swing日期选择控件datepicker 2、附带该控件的使用
java swing用Logger输出错误日志
用JavaSwing写的测试版多人猜拳, 暂时不包含源代码
串口接收数据源码java swing技术,包含了打开串口,接收串口的数据,关闭串口,清空数据等功能,自己手动开发的,如果需要可以自行开发,也可以联系上品威客索取
java Swing读取图片,并以友好的方式呈现个使用者
用java swing 实现的pdf阅读器 很强大 喜欢。。。