设置树的节点图标

看见不少人正在做山寨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分别代表当前节点是否被选中、展开、是叶子节点!

后两个参数没用上!另外试着测试了一下,这个方法被调用次数很频繁,目前自己测试结果是:每点击一个节点会把所有节点遍历一次,不知是否会影响效率。

效果图:

 

 

 

 

后来又碰上了图标显示区域大小一开始就固定了,想实现节点被选中时放大缩小效果,结果被选中时,一个大图标就只有一部分被显示出来,望大家分享经验!另外通过setRootVisiblefalse)可以隐去根结点,这样就比较类似QQ好友列表!

在用树之前我考虑过有JTable,就一个按钮一个JTable,通过流式布局能模仿树,因为个人感觉对表的操作要简单一些,结果失败了!

要在QTreeView中设置节点图标,你可以使用QStandardItemModel来管理形数据,并为每个节点设置一个QStandardItem。然后,可以使用setItemIcon()方法为每个项设置图标。 下面是一个示例代码,演示如何设置QTreeView中节点图标: ```python from PyQt5.QtWidgets import QApplication, QTreeView, QStandardItemModel, QStandardItem from PyQt5.QtGui import QIcon import sys app = QApplication(sys.argv) # 创建一个QTreeView和QStandardItemModel treeView = QTreeView() model = QStandardItemModel() treeView.setModel(model) # 创建根节点 rootItem = QStandardItem('Root') rootItem.setIcon(QIcon('path/to/root_icon.png')) # 设置节点图标 model.appendRow(rootItem) # 创建子节点 childItem1 = QStandardItem('Child 1') childItem1.setIcon(QIcon('path/to/child_icon1.png')) # 设置节点1的图标 rootItem.appendRow(childItem1) childItem2 = QStandardItem('Child 2') childItem2.setIcon(QIcon('path/to/child_icon2.png')) # 设置节点2的图标 rootItem.appendRow(childItem2) # 展开所有节点 treeView.expandAll() treeView.show() sys.exit(app.exec_()) ``` 在上面的示例中,我们首先创建了一个QTreeView和一个QStandardItemModel。然后,我们创建了根节点和两个子节点,并为它们分别设置了相应的图标。最后,我们使用expandAll()方法展开所有节点,并显示了QTreeView。 请确保将`'path/to/root_icon.png'`、`'path/to/child_icon1.png'`和`'path/to/child_icon2.png'`替换为实际的图标文件路径。 希望这可以帮助到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值