public class TreeNodeRender extends JPanel implements TreeCellRenderer{
private UserInfo user; //用户信息
private JLabel nodeImg = null;
private JLabel label; public Component getTreeCellRendererComponent(JTree tree,Object value,boolean sel,
boolean expanded,boolean leaf,int row,boolean hasFocus){
DefaultMutableTreeNode node=(DefaultMutableTreeNode)value;
if(sel) this.setBackground(Color.green);
else this.setBackground(Color.white);
Object obj=node.getUserObject();
if(obj instanceof UserInfo){
user=(UserInfo)obj;
leaf=true;
expanded=false;
nodeImg=new JLabel(createImg(user.getUserImg(),50,50)); //createImg是自定义创建图片方法
String nickname=user.getNickName();
label=new JLabel(nickname);
this.setBounds(1,1,300,50);
this.add(nodeImg);
this.add(label);
}
return this; }
public class UserTree extends JTree{
private DefaultMutableTreeNode root;
private DefaultTreeModel treeModel;
public JLabel label;
private Dao dao;
private SXMainFrame mainFrame;
//private static String userId;
private List<Friends> friendList=new ArrayList<Friends>();
//构造初始化用户列表的树形结构
public UserTree(SXMainFrame mainFrame){
super();
root=new DefaultMutableTreeNode();
treeModel=new DefaultTreeModel(root);
dao=new Dao();
addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent e) {
// TODO Auto-generated method stub
DefaultMutableTreeNode node = (DefaultMutableTreeNode)getLastSelectedPathComponent();
if(node == null)return;
if(node.isLeaf()){
if(getToggleClickCount()==1)
JOptionPane.showMessageDialog(null,node.getUserObject());
}
}
}); setRowHeight(50);
setToggleClickCount(1);
initTree();
setRootVisible(false);
setCellRenderer(new TreeNodeRender());
setModel(treeModel);
this.mainFrame=mainFrame;
}
private synchronized void initTree(){
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
ResultSet rs=dao.getUserGroups(mainFrame.user.getUserId());
try{
Thread.sleep(100);
root.removeAllChildren();
while(rs.next()){
String groupName=rs.getString(2);
DefaultMutableTreeNode groupRoot=new DefaultMutableTreeNode(groupName);
friendList=dao.getFriendList(SXMainFrame.user.getUserId());
Iterator<Friends> iterator=friendList.iterator();
while(iterator.hasNext()){
Friends friend=(Friends)iterator.next(); //获取好友
if(friend.getGroupName().equals(groupName)){
UserInfo friendInfo=new UserInfo(); //定义好友个人对象,用于保存好友个人详细信息
friendInfo=dao.getUser(friend.getFriendId());
groupRoot.add(new DefaultMutableTreeNode(friendInfo)); //调用createLeafNode方法,并将返回的节点添加到组节点中
}
else
continue;
}
root.add(groupRoot);
}
treeModel.reload();
}catch(Exception e){
e.printStackTrace();
}
}
}).start();
}
private UserInfo user; //用户信息
private JLabel nodeImg = null;
private JLabel label; public Component getTreeCellRendererComponent(JTree tree,Object value,boolean sel,
boolean expanded,boolean leaf,int row,boolean hasFocus){
DefaultMutableTreeNode node=(DefaultMutableTreeNode)value;
if(sel) this.setBackground(Color.green);
else this.setBackground(Color.white);
Object obj=node.getUserObject();
if(obj instanceof UserInfo){
user=(UserInfo)obj;
leaf=true;
expanded=false;
nodeImg=new JLabel(createImg(user.getUserImg(),50,50)); //createImg是自定义创建图片方法
String nickname=user.getNickName();
label=new JLabel(nickname);
this.setBounds(1,1,300,50);
this.add(nodeImg);
this.add(label);
}
return this; }
public class UserTree extends JTree{
private DefaultMutableTreeNode root;
private DefaultTreeModel treeModel;
public JLabel label;
private Dao dao;
private SXMainFrame mainFrame;
//private static String userId;
private List<Friends> friendList=new ArrayList<Friends>();
//构造初始化用户列表的树形结构
public UserTree(SXMainFrame mainFrame){
super();
root=new DefaultMutableTreeNode();
treeModel=new DefaultTreeModel(root);
dao=new Dao();
addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent e) {
// TODO Auto-generated method stub
DefaultMutableTreeNode node = (DefaultMutableTreeNode)getLastSelectedPathComponent();
if(node == null)return;
if(node.isLeaf()){
if(getToggleClickCount()==1)
JOptionPane.showMessageDialog(null,node.getUserObject());
}
}
}); setRowHeight(50);
setToggleClickCount(1);
initTree();
setRootVisible(false);
setCellRenderer(new TreeNodeRender());
setModel(treeModel);
this.mainFrame=mainFrame;
}
private synchronized void initTree(){
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
ResultSet rs=dao.getUserGroups(mainFrame.user.getUserId());
try{
Thread.sleep(100);
root.removeAllChildren();
while(rs.next()){
String groupName=rs.getString(2);
DefaultMutableTreeNode groupRoot=new DefaultMutableTreeNode(groupName);
friendList=dao.getFriendList(SXMainFrame.user.getUserId());
Iterator<Friends> iterator=friendList.iterator();
while(iterator.hasNext()){
Friends friend=(Friends)iterator.next(); //获取好友
if(friend.getGroupName().equals(groupName)){
UserInfo friendInfo=new UserInfo(); //定义好友个人对象,用于保存好友个人详细信息
friendInfo=dao.getUser(friend.getFriendId());
groupRoot.add(new DefaultMutableTreeNode(friendInfo)); //调用createLeafNode方法,并将返回的节点添加到组节点中
}
else
continue;
}
root.add(groupRoot);
}
treeModel.reload();
}catch(Exception e){
e.printStackTrace();
}
}
}).start();
}
解决方案 »
- 高分求一个取一定范围随机整数的程序。
- 【新手学java】关于引用自定义包中的类的问题
- jdbc连接sql2008时老出错
- 线程中run方法会被同步吗?
- 怎么让drawLine()的极坐标变成contentPane的极坐标?
- 想升本了,不知应怎么办,各位兄弟指点一下吧!
- 求助:wap2.0按次下载用户的计费问题
- 有点不理解,student的属性age的值是何时赋予的啊?
- 我在ie的主页栏里设置主页地址为http://localhost:8080/.........
- 请高手分析一下出现下面这种情况的可能原因
- Hibernate中间表添加修改数据的一个问题.
- 强制运行,结果正确,却提示一个错误(线程问题)
super.getTreeCellRendererComponent(JTree tree,Object value,boolean sel,
boolean expanded,boolean leaf,int row,boolean hasFocus);
不行的话,试着改变位置,如放在开头或最后。