笑声演员 2021-09-03 11:05 采纳率: 33.3%
浏览 74
已结题

java jtree实现QQ好友列表,读取到了数据库图片显示不出来

public FriendJTreePanel() {
    init();
}
private void init() {
    //设置面板基本属性
    this.setBackground(Color.WHITE);
    //设置根节点
    FriendNode root = new FriendNode("root",true);
    //设置子节点,也就是分组名
    FriendNode newfriend = new FriendNode("新朋友",true);
    FriendNode myequipment = new FriendNode("我的设备0/0",true);
    FriendNode me = new FriendNode("我0/0",true);
    FriendNode friends = new FriendNode("朋友0/0",true);
    FriendNode family = new FriendNode("家人0/0",true);
    FriendNode classmate = new FriendNode("同学",true);
    //分组下添加用户子节点
    List<Userinfo> list = userinfoService.selectAllUserinfo();
    for (Userinfo userinfo : list) {
        if(!MyQQ.username.equals(userinfo.getUsername())){
            ImageIcon headimage = new ImageIcon(userinfo.getHeadimage());
            String nickname = userinfo.getNickname();
            String signature = userinfo.getSignature();
            FriendNode node = new FriendNode(headimage,nickname,1,signature);
            newfriend.add(node);
        }
    }
    //把子节点加入到根节点
    root.add(newfriend);
    root.add(myequipment);
    root.add(me);
    root.add(friends);
    root.add(family);
    root.add(classmate);

}

public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, 
        boolean expanded,boolean leaf, int row, boolean hasFocus) 
{
    super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
    //将value转化为节点对象
    FriendNode  friendNode = (FriendNode)value;
    //从节点中读取图片并且将图片自适应大小、居中
    ImageIcon icon = new ImageIcon(friendNode.getHeadimage()+"");
    icon.setImage(icon.getImage().getScaledInstance(50,50,Image.SCALE_DEFAULT));
    //从节点中读取昵称和是否在线
    String isOnline="离线";
    String text="";
    
    //因为在Label中文本文字不能够通过调用相应的方法进行换行,
    //所以通过使用html的语法对文字进行换行
    if(friendNode.isFathertree()){
        text = friendNode.getNickname();
    }else if(friendNode.getIsOnline()==0){
        isOnline="[离线]";
        text="<html>" + friendNode.getNickname() + "<br/>" + friendNode.getSignature() + isOnline + " <html/>";
    } 
    else if(friendNode.getIsOnline()==1){
        isOnline="[在线]";
        text="<html>" + friendNode.getNickname() + "<br/>" + friendNode.getSignature() + isOnline + " <html/>";
    }
    //设置节点打开的图片
    this.setOpenIcon(ImageUtil.getImageIcon("img/xiala.png", 18,18));
    //设置节点关闭的图片
    this.setClosedIcon(ImageUtil.getImageIcon("img/xialaright.png", 18,18));
    //设置节点的图片
    this.setLeafIcon(ImageUtil.getImageIcon("img/xialaright.png", 18,18));
    //设置图片
    this.setIcon(icon);
    //设置文本
    this.setText(text);
    //设置图片和文本之间的距离
    this.setIconTextGap(15);
    return this;    
}

}

private ImageIcon headimage;//节点存放图片
private String nickname;//第一行文字(显示名字)
private String signature;//第二行文字(显示签名)
private int isOnline;//是否在线
private boolean fathertree;//是否为父节点

public FriendNode () {

}
/**
 * 只包含好友昵称和是否为父节点的节点构造函数
 * @param nickname
 */
public FriendNode (String nickname,boolean fathertree){
    super();
    this.nickname=nickname;
    this.fathertree=fathertree;
}
/**
 * 只包含好友昵称和是否在线的节点构造函数
 * @param nickname
 * @param isOnline
 */
public FriendNode (String nickname,int isOnline){
    super();
    this.nickname=nickname;
    this.isOnline=isOnline;
}
/**
 * 包含好友头像、昵称、是否在线的节点构造函数
 * @param headimage
 * @param nickname
 * @param isOnline
 */
public FriendNode(ImageIcon headimage,String nickname,int isOnline,String signature){
    super();
    this.headimage=headimage;
    this.nickname=nickname;
    this.isOnline=isOnline;
    this.signature=signature;
}

展开全部

  • 写回答

2条回答 默认 最新

  • CSDN专家-sinJack 2021-09-03 11:21
    关注

    headimage看下这个参数是否为null.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    笑声演员 2021-09-03 11:22

    不为null,可以获取

    回复
    笑声演员 2021-09-03 11:23

    获取到了,但是不显示出来,不知道为什么

    回复
    CSDN专家-sinJack 回复 笑声演员 2021-09-03 11:24

    你的回答中。
    FriendNode node = new FriendNode(new ImageIcon("xxxxx"),nickname,1,signature);
    这种能显示,不同点就是第一个参数,headimage也是属于ImageIcon对象的,如果资源路径正确,就能显示。

    回复
    展开全部16条评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 9月10日
  • 已采纳回答 9月3日
  • 创建了问题 9月3日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部