看见不少人正在做山寨QQ,特来此分享一点经验。
当初做QQ时,令我最郁闷的莫过于界面,在好友列表那纠结了很久,当时找了很久资料,终于算是把设置JTree节点的图标解决了,直接看源码吧:
//jtemp是一个JTree
jtemp.setCellRenderer(new DefaultTreeCellRenderer(){
int i=0;
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
String iconName;
String value1=value.toString();
if(value1.equals("小红")){
iconName="1.png";
setIcon(new javax.swing.ImageIcon(iconName));
}if(value1.equals("小明")){
iconName="2.png";
setIcon(new javax.swing.ImageIcon(iconName));
}
return this;
}
});
public Component getTreeCellRendererComponent(JTree tree,
Object value,
boolean sel,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus)
这里主要就是上面这个方法的使用,当初我第一眼看见这个方法时,我被吓着了,7个参数,加之找不到相应的资料,几乎不敢下手,不过仔细看看,这个方法还是很好摆平的,
tree:当前节点所处的树
value:当前节点的值
sel 、expanded、 leaf分别代表当前节点是否被选中、展开、是叶子节点!
后两个参数没用上!另外试着测试了一下,这个方法被调用次数很频繁,目前自己测试结果是:每点击一个节点会把所有节点遍历一次,不知是否会影响效率。
效果图:
后来又碰上了图标显示区域大小一开始就固定了,想实现节点被选中时放大缩小效果,结果被选中时,一个大图标就只有一部分被显示出来,望大家分享经验!另外通过setRootVisible(false)可以隐去根结点,这样就比较类似QQ好友列表!
在用树之前我考虑过有JTable,就一个按钮一个JTable,通过流式布局能模仿树,因为个人感觉对表的操作要简单一些,结果失败了!