社区
Java
帖子详情
怎么用Java实现QQ消息输入框这种能表情图片和文字混排的效果
win7452
2010-05-05 10:27:08
怎么用Java实现QQ消息输入框这种能图片和文字混排的效果呢?
消息编辑框里就要 表情图片 和文字混合的。
应该是怎么样的一个解决方案呢?拜托各位大侠给个实现的思路。
...全文
494
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
四六的六
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;
}
}
}
氢燃料电池极化曲线参数辨识与性能评估,采用人工蜂群算法(Matlab代码
实现
)
内容概要:本文聚焦于氢燃料电池极化曲线参数的辨识与性能评估,采用人工蜂群算法(ABC)结合Matlab编程
实现
。研究基于Amphlett半经验模型构建质子交换膜燃料电池(PEMFC)的极化特性模型,通过优化算法对模型中的高维非线性参数进行全局辨识,旨在精确还原燃料电池的实际输出电压-电流关系。文中系统分析了人工蜂群算法在参数反演过程中的收敛性、敏感性与可辨识性,验证了其在多参数耦合、强非线性系统建模中的优越性能。同时,通过对辨识后的模型进行多维度性能评估,如残差分析、拟合优度检验与工况适应性测试,全面衡量模型精度与实用性,为燃料电池系统的设计、控制与优化提供可靠的理论依据与数据支撑。; 适合人群:具备一定Matlab编程基础,从事新能源、燃料电池、系统建模或智能优化算法研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握基于智能优化算法的复杂电化学系统参数辨识方法;② 学习利用Amphlett等半经验模型进行PEMFC建模与仿真;③ 理解人工蜂群算法在解决高维非线性优化问题中的应用技巧与性能分析方法;④
实现
燃料电池性能的精确评估与预测。; 阅读建议:本资源以Matlab代码
实现
为核心,强调算法应用与实践操作。学习者应在掌握基本电化学原理和优化算法概念的基础上,结合提供的代码进行调试与仿真,重点关注目标函数的构建、参数初始化范围的设定以及算法收敛过程的可视化分析,以深入理解参数辨识的内在机理。
【变分多谐波对偶模式追踪】从噪声信号中提取重复瞬态分量的方法(Matlab代码
实现
)
内容概要:本文详细介绍了一种名为“变分多谐波对偶模式追踪”的先进信号处理方法,旨在从强噪声背景中高效提取重复性瞬态信号成分。该方法通过构建变分模型,结合多谐波分析与对偶模式追踪技术,有效增强了微弱周期性瞬态特征的识别能力,尤其适用于处理复杂、非平稳且信噪比极低的工程信号。文中不仅阐述了其核心理论与算法流程,还提供了完整的Matlab代码
实现
,便于读者复现和应用。; 适合人群:具备一定信号处理或相关工程学科背景的研究生、科研人员及工程技术人员。; 使用场景及目标:① 用于机械设备故障诊断中提取轴承、齿轮等部件产生的微弱冲击信号;② 解决旋转机械、电力电子等领域中周期性瞬态信号被强噪声淹没的难题;③ 为相关领域的科研工作者提供一种有效的信号特征提取工具和技术参考。; 阅读建议:建议读者结合Matlab代码,深入理解算法的数学推导与
实现
细节,通过实际信号数据进行测试,以掌握其参数设置技巧和性能边界。
EdgeLinkStudio中文说明书.pdf-研华网关工业物联网中文版(已更新)
源码链接: https://pan.quark.cn/s/a4b39357ea24 《EdgeLinkStudio》是一款边缘计算开发工具,旨在协助用户高效构建并部署边缘计算应用程序。该软件主要用于连接、监控和管理边缘设备,以及执行数据采集、数据解析和边缘计算任务等操作。详细掌握《EdgeLinkStudio》的中文说明书,对于深入学习并有效运用该软件将大有裨益。
linux ubuntu 远程桌面安装
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 LinuxMirrors GNU/Linux 更换系统软件源脚本及 Docker 安装与换源脚本 繁體中文 | English 操作系统 适配版本 Debian 8 ~ 13 Ubuntu 14 ~ 26 Kali Linux all Linux Mint 17 ~ 22 / LMDE 2 ~ 7 Deepin(深度) all Zorin OS all Armbian all Proxmox VE all Raspberry Pi OS all Red Hat Enterprise Linux 7 ~ 10 Fedora 30 ~ 44 CentOS 7 ~ 8 / Stream 8 ~ 10 Rocky Linux 8 ~ 10 AlmaLinux 8 ~ 10 Oracle Linux 8 ~ 10 openEuler(开源欧拉) 20 ~ 25 OpenCloudOS(鸥栖) 6 ~ 9 / Stream 23 openKylin(开放麒麟) all Anolis OS(龙蜥) 8 / 23 openSUSE Leap 15 ~ 16 / Tumbleweed Arch Linux all Manjaro all EndeavourOS all Alpine Linux v3 / edge Gentoo all NixOS 19 ~ 26 Void Linux all 官方网站 使用方法 软件源列表 Docker 安装(额外脚本) 社区 成为赞助商 赞助商 快速开始 ### GNU/Linux 更换系统软件源 ### Docker 安装与换源 ### Docker 更换镜...
Java
51,407
社区成员
86,122
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章