社区
Java
帖子详情
怎么用Java实现QQ消息输入框这种能表情图片和文字混排的效果
win7452
2010-05-05 10:27:08
怎么用Java实现QQ消息输入框这种能图片和文字混排的效果呢?
消息编辑框里就要 表情图片 和文字混合的。
应该是怎么样的一个解决方案呢?拜托各位大侠给个实现的思路。
...全文
463
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
一样输入
文字
和表情图像
在Android应用开发中,
实现
像
QQ
聊天
输入框
那样既可以输入
文字
也可以插入表情图像的功能是十分常见的需求。表情图像的加入通常能够提高用户的互动体验,丰富聊天内容的表达方式。在Android SDK中,要
实现
这样的功能并...
仿
QQ
聊天界面,可发png,gif,图文
混排
【标题】:“仿
QQ
聊天界面,可发png,gif,图文
混排
”这一主题涉及到的是在软件开发领域中,如何创建一个类似
QQ
的聊天应用程序,其中包括对图片(png和gif格式)的支持以及图文
混排
的功能
实现
。这通常涵盖以下几个...
模仿
qq
一些常见的功能
对于复杂的图文
混排
,可能需要结合`SpannableString`和`ImageSpan`类,通过设置不同的Span来控制
文字
和图片的位置及样式。 其次,文本输入功能是即时通讯应用的基础。在Android中,可以使用`EditText`控件作为...
仿微信表情输入键盘(支持 Gif 表情图文
混排
)
本文将解析一下个人的自定义表情输入控件库 PandaEmoView 的
实现
和使用。 该库具有以下特点: 支持 emoji
表情图片
支持 gif 动态表情输入显示 支持单张贴图表情(与微信收藏表情一致) 支持题图表情库的添加删除 ...
tinymce控件在前端开发中如何处理word图文
混排
内容?
要求:开源,免费,技术支持编辑器:TinyMCE需求:复制粘贴word内容图片,图文
混排
,图片转存前端:vue,vue2-cli,vue3-cli后端:
java
,jsp,springboot,asp.net,php,asp,.net core,.net mvc,.net form平台:Windows,...
Java
51,402
社区成员
85,918
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章