社区
Java
帖子详情
怎么用Java实现QQ消息输入框这种能表情图片和文字混排的效果
win7452
2010-05-05 10:27:08
怎么用Java实现QQ消息输入框这种能图片和文字混排的效果呢?
消息编辑框里就要 表情图片 和文字混合的。
应该是怎么样的一个解决方案呢?拜托各位大侠给个实现的思路。
...全文
460
4
打赏
收藏
怎么用Java实现QQ消息输入框这种能表情图片和文字混排的效果
怎么用Java实现QQ消息输入框这种能图片和文字混排的效果呢? 消息编辑框里就要 表情图片 和文字混合的。 应该是怎么样的一个解决方案呢?拜托各位大侠给个实现的思路。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
h_hello_o
2012-12-18
打赏
举报
回复
mark mark mark,最近正写一个网络聊天室呢
萧湘易水寒
2011-08-17
打赏
举报
回复
mark mark
jypapgl
2010-05-06
打赏
举报
回复
mark
四六的六
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;
}
}
}
Android开发技巧之像
QQ
一样输入
文字
和表情图像
QQ
聊天
输入框
,在
输入框
中可以同时输入
文字
和表情图像。实际上,
这种
效果
在Android SDK中只需要几行代码就可以
实现
,本文将会介绍如何
实现
像
QQ
一样输入表情图像
仿
QQ
聊天界面,可发png,gif,图文
混排
仿
QQ
聊天界面,可发png,gif,图文
混排
都是运行可以的
模仿
qq
一些常见的功能
模仿
qq
一些常见的功能源码,这个案例是
实现
了类似我们常用的
qq
的一些最常用的功能,如
实现
图文
混排
,文本输入,以及涂鸦等功能,可以说跟我们现实中使用的
qq
的功能没什么两样了。
仿微信表情输入键盘(支持 Gif 表情图文
混排
)
简介 自定义的表情输入键盘在很多应用中都会有用到,譬如微信、
QQ
等社交聊天软件中更是不可缺少的部分。本文将解析一下个人的自定义表情输入控件库 PandaEmoView 的
实现
和使用。 该库具有以下特点: 支持 emoji
表情图片
支持 gif 动态表情输入显示 支持单张贴图表情(与微信收藏表情一致) 支持题图表情库的添加删除
效果
图: 快速使用 引入库 compile 'com.pan...
Java
51,397
社区成员
85,848
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章