社区
Java
帖子详情
怎么用Java实现QQ消息输入框这种能表情图片和文字混排的效果
win7452
2010-05-05 10:27:08
怎么用Java实现QQ消息输入框这种能图片和文字混排的效果呢?
消息编辑框里就要 表情图片 和文字混合的。
应该是怎么样的一个解决方案呢?拜托各位大侠给个实现的思路。
...全文
451
4
打赏
收藏
怎么用Java实现QQ消息输入框这种能表情图片和文字混排的效果
怎么用Java实现QQ消息输入框这种能图片和文字混排的效果呢? 消息编辑框里就要 表情图片 和文字混合的。 应该是怎么样的一个解决方案呢?拜托各位大侠给个实现的思路。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
h_hello_o
2012-12-18
打赏
举报
回复
mark mark mark,最近正写一个网络聊天室呢
萧湘易水寒
2011-08-17
打赏
举报
回复
mark mark
jypapgl
2010-05-06
打赏
举报
回复
mark
lanchifeiyang
2010-05-06
打赏
举报
回复
貌似,我看到过,。。我有个类似的,你看看吧
package 实例;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
public class Test extends JFrame
{
private JScrollPane scrollPane = null; // 滚动
private JTextPane text = null;
private Box box = null; // 放输入组件的容器
private JButton b_insert = null,
b_remove = null,
b_icon = null; // 插入按钮;清除按钮;插入图片按钮
private JTextField addText = null; // 文字输入框
// 字体名称;字号大小;文字样式;文字颜色;文字背景颜色
private JComboBox fontName = null,
fontSize = null,
fontStyle = null,
fontColor = null,
fontBackColor = null;
private StyledDocument doc = null; // 非常重要插入文字样式就靠它了
public Test()
{
super("JTextPane Test");
try
{ // 使用Windows的界面风格
UIManager.setLookAndFeel
("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
catch (Exception e)
{
e.printStackTrace();
}
text = new JTextPane();
text.setEditable(false); // 不可录入
doc = text.getStyledDocument(); // 获得JTextPane的Document
scrollPane = new JScrollPane(text);
addText = new JTextField(18);
String[] str_name = { "宋体", "黑体", "Dialog", "Gulim" };
String[] str_Size = { "12", "14", "18", "22", "30", "40" };
String[] str_Style = { "常规", "斜体", "粗体", "粗斜体" };
String[] str_Color = { "黑色", "红色", "蓝色", "黄色", "绿色" };
String[] str_BackColor = { "无色", "灰色", "淡红", "淡蓝", "淡黄", "淡绿" };
fontName = new JComboBox(str_name); // 字体名称
fontSize = new JComboBox(str_Size); // 字号
fontStyle = new JComboBox(str_Style); // 样式
fontColor = new JComboBox(str_Color); // 颜色
fontBackColor = new JComboBox(str_BackColor); // 背景颜色
b_insert = new JButton("插入"); // 插入
b_remove = new JButton("清空"); // 清除
b_icon = new JButton("图片"); // 插入图片
b_insert.addActionListener(new ActionListener()
{ // 插入文字的事件
public void actionPerformed(ActionEvent e)
{
insert(getFontAttrib());
addText.setText("");
}
});
b_remove.addActionListener(new ActionListener()
{ // 清除事件
public void actionPerformed(ActionEvent e)
{
text.setText("");
}
});
b_icon.addActionListener(new ActionListener()
{ // 插入图片事件
public void actionPerformed(ActionEvent arg0)
{
JFileChooser f = new JFileChooser(); // 查找文件
f.showOpenDialog(null);
insertIcon(f.getSelectedFile()); // 插入图片
}
});
box = Box.createVerticalBox(); // 竖结构
Box box_1 = Box.createHorizontalBox(); // 横结构
Box box_2 = Box.createHorizontalBox(); // 横结构
box.add(box_1);
box.add(Box.createVerticalStrut(8)); // 两行的间距
box.add(box_2);
box.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8)); // 8个的边距
// 开始将所需组件加入容器
box_1.add(new JLabel("字体:")); // 加入标签
box_1.add(fontName); // 加入组件
box_1.add(Box.createHorizontalStrut(8)); // 间距
box_1.add(new JLabel("样式:"));
box_1.add(fontStyle);
box_1.add(Box.createHorizontalStrut(8));
box_1.add(new JLabel("字号:"));
box_1.add(fontSize);
box_1.add(Box.createHorizontalStrut(8));
box_1.add(new JLabel("颜色:"));
box_1.add(fontColor);
box_1.add(Box.createHorizontalStrut(8));
box_1.add(new JLabel("背景:"));
box_1.add(fontBackColor);
box_1.add(Box.createHorizontalStrut(8));
box_1.add(b_icon);
box_2.add(addText);
box_2.add(Box.createHorizontalStrut(8));
box_2.add(b_insert);
box_2.add(Box.createHorizontalStrut(8));
box_2.add(b_remove);
this.getRootPane().setDefaultButton(b_insert); // 默认回车按钮
this.getContentPane().add(scrollPane);
this.getContentPane().add(box, BorderLayout.SOUTH);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(600, 400);
this.setLocationRelativeTo(null);
this.setVisible(true);
addText.requestFocus();
}
/**
* 插入图片
*
* @param icon
*/
private void insertIcon(File file) {
text.setCaretPosition(doc.getLength()); // 设置插入位置
text.insertIcon(new ImageIcon(file.getPath())); // 插入图片
insert(new FontAttrib()); // 这样做可以换行
}
/**
* 将文本插入JTextPane
*
* @param attrib
*/
private void insert(FontAttrib attrib) {
try { // 插入文本
doc.insertString(doc.getLength(), attrib.getText() + "\n", attrib.getAttrSet());
} catch (BadLocationException e) {
e.printStackTrace();
}
}
/**
* 获取所需要的文字设置
*
* @return FontAttrib
*/
private FontAttrib getFontAttrib() {
FontAttrib att = new FontAttrib();
att.setText(addText.getText());
att.setName((String) fontName.getSelectedItem());
att.setSize(Integer.parseInt((String) fontSize.getSelectedItem()));
String temp_style = (String) fontStyle.getSelectedItem();
if (temp_style.equals("常规")) {
att.setStyle(FontAttrib.GENERAL);
} else if (temp_style.equals("粗体")) {
att.setStyle(FontAttrib.BOLD);
} else if (temp_style.equals("斜体")) {
att.setStyle(FontAttrib.ITALIC);
} else if (temp_style.equals("粗斜体")) {
att.setStyle(FontAttrib.BOLD_ITALIC);
}
String temp_color = (String) fontColor.getSelectedItem();
if (temp_color.equals("黑色")) {
att.setColor(new Color(0, 0, 0));
} else if (temp_color.equals("红色")) {
att.setColor(new Color(255, 0, 0));
} else if (temp_color.equals("蓝色")) {
att.setColor(new Color(0, 0, 255));
} else if (temp_color.equals("黄色")) {
att.setColor(new Color(255, 255, 0));
} else if (temp_color.equals("绿色")) {
att.setColor(new Color(0, 255, 0));
}
String temp_backColor = (String) fontBackColor.getSelectedItem();
if (!temp_backColor.equals("无色")) {
if (temp_backColor.equals("灰色")) {
att.setBackColor(new Color(200, 200, 200));
} else if (temp_backColor.equals("淡红")) {
att.setBackColor(new Color(255, 200, 200));
} else if (temp_backColor.equals("淡蓝")) {
att.setBackColor(new Color(200, 200, 255));
} else if (temp_backColor.equals("淡黄")) {
att.setBackColor(new Color(255, 255, 200));
} else if (temp_backColor.equals("淡绿")) {
att.setBackColor(new Color(200, 255, 200));
}
}
return att;
}
public static void main(String args[]) {
new Test();
}
/**
* 字体的属性类
*/
private class FontAttrib {
public static final int GENERAL = 0; // 常规
public static final int BOLD = 1; // 粗体
public static final int ITALIC = 2; // 斜体
public static final int BOLD_ITALIC = 3; // 粗斜体
private SimpleAttributeSet attrSet = null; // 属性集
private String text = null, name = null; // 要输入的文本和字体名称
private int style = 0, size = 0; // 样式和字号
private Color color = null, backColor = null; // 文字颜色和背景颜色
/**
* 一个空的构造(可当做换行使用)
*/
public FontAttrib() {
}
/**
* 返回属性集
*
* @return
*/
public SimpleAttributeSet getAttrSet() {
attrSet = new SimpleAttributeSet();
if (name != null)
StyleConstants.setFontFamily(attrSet, name);
if (style == FontAttrib.GENERAL) {
StyleConstants.setBold(attrSet, false);
StyleConstants.setItalic(attrSet, false);
} else if (style == FontAttrib.BOLD) {
StyleConstants.setBold(attrSet, true);
StyleConstants.setItalic(attrSet, false);
} else if (style == FontAttrib.ITALIC) {
StyleConstants.setBold(attrSet, false);
StyleConstants.setItalic(attrSet, true);
} else if (style == FontAttrib.BOLD_ITALIC) {
StyleConstants.setBold(attrSet, true);
StyleConstants.setItalic(attrSet, true);
}
StyleConstants.setFontSize(attrSet, size);
if (color != null)
StyleConstants.setForeground(attrSet, color);
if (backColor != null)
StyleConstants.setBackground(attrSet, backColor);
return attrSet;
}
/**
* 设置属性集
*
* @param attrSet
*/
public void setAttrSet(SimpleAttributeSet attrSet) {
this.attrSet = attrSet;
}
/* 后面的注释就不写了,一看就明白 */
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
public Color getBackColor() {
return backColor;
}
public void setBackColor(Color backColor) {
this.backColor = backColor;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getStyle() {
return style;
}
public void setStyle(int style) {
this.style = style;
}
}
}
仿微信表情输入键盘(支持 Gif 表情图文
混排
)
简介 自定义的表情输入键盘在很多应用中都会有用到,譬如微信、
QQ
等社交聊天软件中更是不可缺少的部分。本文将解析一下个人的自定义表情输入控件库 PandaEmoView 的
实现
和使用。 该库具有以下特点: 支持 emoji
表情图片
支持 gif 动态表情输入显示 支持单张贴图表情(与微信收藏表情一致) 支持题图表情库的添加删除
效果
图: 快速使用 引入库 compile 'com.pan...
Android 在
文字
中插入
表情图片
转载自:http://blog.csdn.net/assassin4824/article/details/7766812 EditText和TextView一样,也可以进行图文
混排
。所不同的是,TextView只用于显示图文
混排
效果
,而EditText不仅可显示, 也可混合输入
文字
和图像,让我们先回顾一下图5.2所示的
QQ
聊天
输入框
,在
输入框
中可以同时输入
文字
和表...
让某些
文字
改变颜色+添加超链接的SpannableString的简单用法
按照我的理解SpannableString 举个例子:就是让我们做出向一些登录授权中,那几行字上有的会有下划线,或者点击
文字
,跳转网页,还有我们使用的
QQ
中发
消息
的时候,
文字
加表情,
实现
图文
混排
的
效果
等等。。。点击打开链接原博主地址[
java
] view plain copy<span style="font-size:18px;" deep="6">public class ...
JAVA
这门语言 如何从刚毕业的小菜鸟进阶成月薪15K以上的工程师
岁月不饶人,时间总是从不经意的指缝间流逝,越来越觉得,朝九晚五,晚上回来,一两个钟的时间,是非常宝贵的自我增长知识的机会。 从14年到如今,加上大学4年,不知不觉已经接触8年多了,觉得这门语言很好玩,啥都能搞,平时自己想弄点好玩的东西,都能拿它来玩起来。 所以,我们要学会,学好,喜欢上这门语言,一但在这门语言上有一定功底,再平行学习其他语言,如python、ruby、golang、swift、kotiln等语言,基本也就是了解,然后再下源码学习,就能上手。 全套
java
视频文档+企业级源码
iOS、mac开源项目及库汇总
只要设置很多不同的HMTL模版,就能轻松的
实现
一个View多种内容格式的显示,对于不熟悉 HTML或者减轻 工作量而言,把这些工作让设计分担一下还是很好的,也比较容易
实现
设计想要的
效果
。- 用一个pan手势来代替UISwipegesture的各个方向、拉伸图片、播放GIF、上拉刷新、把tableview里cell的小对勾的颜色改变、 navigationbar弄成透明的而不是带模糊的
效果
、改变uitextfield placeholder的颜色和位置。可以自定义自己的表情识别正则,和对应的表情图像。
Java
50,527
社区成员
85,606
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章