笑声演员
2021-09-03 19:05
采纳率: 100%
浏览 58
已结题

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 19:21
    已采纳

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

    评论
    解决 无用
    打赏 举报
查看更多回答(1条)

相关推荐 更多相似问题