微信截图_20190724141738.png (20.52 KB, 下载次数: 716)
下载附件 保存到相册
5 年前 上传
package cn.itechyou.chat.swing; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.InputStream; import java.net.URL; import javax.swing.BorderFactory; import javax.swing.DefaultListCellRenderer; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.SwingConstants; import org.jim.common.packets.User; /** * DefaultListCellRenderer是Swing JList的渲染器 * ImageCellRender继承DefaultListCellRender,DefaultListCellRender继承于JLabel,所以只要将图片赋给JLabel就可以更改显示样式 * @author Silly * */ public class ImageCellRender extends DefaultListCellRenderer { private static final long serialVersionUID = 1L; /** * 重写【ListCellRenderer】的getListCellRendererComponent()方法 * JList<? extends Object> list:表示JList中ListModel中存放的对象可以是任何引用类型(从JList的源码得知这个泛型是控制ListModel中对象类型的) * Object value:由list.getModel().getElementAt(index)返回的值,也就是当前正在绘制的对象 * index:当前选择的单元格下标 * isSelected:单元格被选择的状态(这个被选择是发生在选择单元格改变时,如果选了A再选A返回是false,如果选了A选B再选A才为true) * cellHasFocus:和isSelected的效果一样 不过没有用到这个参数 不知道有什么作用 */ @Override public Component getListCellRendererComponent(JList<? extends Object> list, Object value, int index, boolean isSelected, boolean cellHasFocus){ super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); if(value instanceof User){ User user = (User) value; try{ URL url = new URL(user.getAvatar()); ImageIcon icon = new ImageIcon("d:/3_qq_40064948.jpg"); icon.setImage(icon.getImage().getScaledInstance(30, 30, Image.SCALE_DEFAULT)); int iconWidth = icon.getIconWidth(); int iconHeight = icon.getIconHeight(); setIcon(icon); setText(user.getNick()); setIconTextGap(10); setSize(iconWidth, iconHeight); setForeground(new Color(36, 27, 48)); if(cellHasFocus){ setForeground(new Color(255, 255, 255)); setBackground(new Color(36, 27, 48)); }else { setForeground(new Color(36, 27, 48)); setBackground(new Color(255, 255, 255)); } setVerticalTextPosition(SwingConstants.CENTER); setHorizontalTextPosition(SwingConstants.RIGHT); setBorder(BorderFactory.createMatteBorder(5, 5, 5, 5, new Color(255, 255, 255))); }catch(Exception e){ e.printStackTrace(); } } return this; } }
package cn.itechyou.chat.swing; import java.util.ArrayList; import java.util.List; import javax.swing.AbstractListModel; import org.jim.common.packets.User; public class FriendListModel extends AbstractListModel<User> { private static final long serialVersionUID = 1L; private List<User> users = new ArrayList<User>(); public void addElement(User file) { this.users.add(file); } public int getSize() { return users.size(); } public User getElementAt(int index) { return users.get(index); } public boolean contains(User u) { for (User user : users) { if(user.getId().equals(u.getId())) { return true; } } return false; } }
来源:即时通讯网 - 即时通讯开发者社区!
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级Web端即时通讯框架。
详细介绍 / 精编源码 / 手册教程
移动端实时音视频框架。
详细介绍 / 性能测试 / 安装体验
基于MobileIMSDK的移动IM系统。
详细介绍 / 产品截图 / 安装体验
一套产品级Web端IM系统。
详细介绍 / 产品截图 / 演示视频
引用此评论
Copyright © 2014-2024 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.255869 second(s), 40 queries , Gzip On.