`

xul : tree的用法

阅读更多

Tree也是XUL中的复杂控件之一,理解XUL中的tree要注意区别传统概念中的treeview,因为这里的tree除了可以实现treeview,还有一个重要的功能,就是实现DataGrid。

使用tree来实现DataGrid

看下面例子:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window id="findfile-window"   
title="Find Files"   
orient="horizontal"   
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

<tree id="tree1" flex="1">
  <treecols>
    <treecol id="nameColumn1" label="Name" flex="1"/>
    <treecol id="addressColumn1" label="Address" flex="2"/>
  </treecols>
  <treechildren>
    <treeitem>
      <treerow>
        <treecell label="joe@somewhere.com"/>
        <treecell label="Top secret plans"/>
      </treerow>
    </treeitem>
    <treeitem>
      <treerow>
        <treecell label="mel@whereever.com"/>
        <treecell label="Let's do lunch"/>
      </treerow>
    </treeitem>
  </treechildren>
</tree>

</window>



1.tree表示DataGrid的开始
2.treecols表示列集合,列的标题可以指定在treecol中(label属性),可以用flex属性来控制列宽,treecol必须设置id属性,用于控制该列显示与否
3.treechildren表示行集合
4.右上角的按钮可以选择隐藏或显示列,可以设置tree的hidecolumnpicker =true来隐藏这个按钮,可以设置treecol的hidden ="true"来选择某一列默认不显示
5.单击鼠标可以选中某一行,也可按住shift或ctrl来选中多行,如果只能单选一行,需要设置tree的seltype ="single"
6.如果要允许列可拖动(点击表头,拖动,可交换列的位置),设置tree的enableColumnDrag ="true"
7.如果想要改变列宽,在两个treecol标签之间加上<splitter class="tree-splitter"/>

 效果:

用tree来实现TreeView

分级树是通过在某个treeitem中嵌套treechildren来实现的。

<tree flex="1">
  <treecols>
      <treecol id="firstname" label="First Name" primary="true" flex="3"/>
      <treecol id="lastname" label="Last Name" flex="7"/>
  </treecols>
  <treechildren>
    <treeitem container="true" open="true" >
      <treerow>
        <treecell label="Guys"/>
      </treerow>
      <treechildren>
        <treeitem>
          <treerow>
            <treecell label="Bob"/>
            <treecell label="Carpenter"/>
          </treerow>
        </treeitem>
        <treeitem>
          <treerow>
            <treecell label="Jerry"/>
            <treecell label="Hodge"/>
          </treerow>
        </treeitem>
      </treechildren>
    </treeitem>
  </treechildren>
</tree>
  1. 在需要分级的treeitem元素中,设置containter属性为"true"。这样就允许用户可以通过双击来打开和关闭内部的行。通过设置open属性为"true"或"false",就可以设置初始状态下内部行的打开和关闭。
  2. 将表头中的主要列设置primary属性,这样就可能在有分级情况的这一列单元格的前面显示一个小三角或加号。一旦某列被设为primary,用户是无法关闭的。
  3. 在某个需要分级的treeitem中嵌入treechildren元素。注意不要放在treerow中,那样做无效。

效果:  

自定义view

      这因该是我们最常用的,从数据库中取出数据源后,显示在DataGrid或treeview中,对于这样的tree,只需要定义columns,treechildren留空:

<tree id="my-tree" flex="1">
  <treecols>
    <treecol id="namecol" label="Name" flex="1"/>
    <treecol id="datecol" label="Date" flex="1"/>
  </treecols>
  <treechildren/>
</tree>

      在这里,数据源是一个对象,这个对象必须实现nslTreeView接口(这个还不太理解。。。),可以用javascript来实现这个对象,如果一个页面中有多个tree,需要为每一个tree写一个treeView对象。

<script>
var treeView = {
    rowCount : 10000, //设置总行数
    getCellText : function(row,column){//设置数据
      if (column.id == "namecol") return "Row "+row;
      else return "February 18";
    },
    setTree: function(treebox){ this.treebox = treebox; },
    isContainer: function(row){ return false; },
    isSeparator: function(row){ return false; },
    isSorted: function(){ return false; },
    getLevel: function(row){ return 0; },
    getImageSrc: function(row,col){ return null; },
    getRowProperties: function(row,props){},
    getCellProperties: function(row,col,props){},
    getColumnProperties: function(colid,col,props){}
};

   最后一步是把该对象指定到一个具体的tree      

    document.getElementById('my-tree').view = treeView;
</script>

tree的事件

 1.选中tree的某一节点

 <tree id="treeset" onselect ="alert('You selected something!');">

 

与listbox比较
1.listbox支持任意形式的内容,但tree只支持text和images
2.tree支持nested rows,listbox不支持。

分享到:
评论

相关推荐

    Firefox附加组件开发者指南

    接下来,我们将深入探讨这些技术和工具的具体使用方法。 --- #### 第二章:开发扩展过程中使用的技术 ##### 开发Firefox扩展用到的技术 开发Firefox扩展涉及到的主要技术包括XML、CSS、JavaScript和DOM。 - **...

    zk学习教程

    - **Tree**: 层次结构展示数据。 - **Chart**: 数据图表展示。 - **Slider**: 滑动条,调整数值。 - **Splitter**: 分割面板,用于分割窗口。 ##### 2.2 容器控件 容器控件用于组织和管理基本控件。 - **Window**...

    zk组件详解

    本文档将深入探讨ZK中的各类组件及其使用方法。 #### 基础组件 在ZK中,基础组件构成了UI构建的基础,包括`AbstractComponent`、`FooterElement`、`FormatInputElement`等。这些组件为更复杂的UI结构提供了必要的...

    ZK框架开发手册

    ZK框架允许开发者利用XUL(XML用户界面语言),通过简单的标记和脚本来创建复杂的Web界面。 首先,ZK框架的最新版本为7.0.5,开发者手册提供了全面的技术指南和参考资料。该手册详细介绍了ZK的架构概览,包括...

    YOLOv10实时端到端目标检测.zip

    python、yolo、pytorch

    网络安全是指通过技术、管理和法律手段保护网络系统、数据及用户隐私,防止未经授权的访问、攻击和信息泄露,确保可用性、完整性和机密性

    网络安全是通过技术手段、管理策略和法律规范,保护网络系统、数据及用户隐私免受未经授权的访问、攻击或泄露,确保网络服务的可用性、数据的完整性和机密性。其核心内容包括: 1. 技术防护:如防火墙、入侵检测系统(IDS)、加密通信、漏洞修复等。 2. 管理措施:包括安全策略制定、访问控制、安全审计、应急响应等。 3. 法律与合规:遵循《网络安全法》《数据安全法》等法规,保障用户隐私与国家安全。 4. 安全意识:提升用户对钓鱼攻击、密码安全等风险的防范能力。 # 适用人群 - 企业/组织:IT运维人员、安全管理员、开发工程师(需保障业务系统安全)。 - 普通用户:需防范个人信息泄露、网络诈骗等风险。 - 政府与公共部门:确保关键基础设施(如电力、金融、通信)的安全运行。 - 教育领域:学生及教师需了解基础安全知识以应对网络威胁。 # 适用场景及目标 1. 企业场景: - 目标:防御黑客攻击、数据泄露、勒索软件等,保障业务连续性。 - 措施:部署网络隔离、多因素认证、定期渗透测试。 2

    2025年DeepSeek引发广泛关注,大模型应用落地将加速.pdf

    人工智能、大语言模型相关学习资料

    基于C#的调用今日头条API并写入数据库 源码.zip

    需要将源码中的key换成正式的key方可使用

    图像处理_TF-Slim_卫星图像分类_训练模型_1741783746.zip

    图像处理项目实战

    jaxlib-0.4.18-cp312-cp312-win_amd64.whl

    该资源为jaxlib-0.4.18-cp312-cp312-win_amd64.whl,欢迎下载使用哦!

    物联网_Android_Things_车牌识别_HyperLPR4Android_边缘计算.zip

    车牌识别项目

    智慧停车_云计算_C_C_Linux_QT_OpenCV_E_1741774510.zip

    车牌识别项目

    生物医学_清测康居家心率体温检测设备_智能监测_1741166755.zip

    Arduino项目

    小微智慧园区数字化建设方案PPT(35页).pptx

    在当今数字化浪潮中,园区智慧化建设正成为推动区域经济发展和产业转型升级的关键力量。这份园区智慧化解决方案全面展示了如何通过集成大数据、云计算、物联网(IoT)、人工智能(AI)、地理信息系统(GIS)和建筑信息模型(BIM)等前沿技术,为传统产业园区插上数字的翅膀,打造“数字创新”产业园区。 数字技术赋能,重塑园区生态 传统产业园区往往面临运营效率低下、管理粗放、资源利用率不高等问题。而通过智慧化改造,园区可以实现从“清水房”到“精装房”的华丽蜕变。数字化技术不仅提升了园区的运营管理水平,降低了运营成本,还显著增强了园区的竞争力和吸引力。例如,通过构建园区数字模型(CIM),实现了多规数据融合,形成了园区规划“一张图”,为园区管理提供了直观、高效的可视化工具。此外,智能感知设施的应用,如环境监测、能耗监测等,让园区管理更加精细化、科学化。智慧能源管理系统通过实时监测和智能分析,帮助园区实现低碳绿色发展,而综合安防管控系统则通过AI+视频融合技术,为园区安全保驾护航。更有趣的是,这些技术的应用还让园区服务变得更加个性化和便捷,比如园区移动APP,让企业和员工可以随时随地享受园区服务,从会议室预定到智慧公寓管理,一切尽在“掌”握。 智慧运营中心,打造园区大脑 园区智慧化建设的核心在于构建智慧运营中心,这可以看作是园区的“数字大脑”。通过集成物联网服务平台、大数据分析平台、应用开发赋能平台等核心支撑平台,智慧运营中心实现了对园区内各类数据的实时采集、处理和分析。在这个“大脑”的指挥下,园区管理变得更加高效、协同。比如,建设工程项目智慧监管系统,通过基于二三维GIS底图的统一数字化监管,实现了对园区在建工程项目的进度控制、质量控制和安全控制的全方位监管。可视化招商系统则利用CIM模型,以多种方式为园区对外招商推介提供了数字化、在线化的展示窗口。而产业经济分析系统,则通过挖掘和分析产业数据,为园区产业发展提供了有力的决策支持。智慧运营中心的建设,不仅提升了园区的整体运营水平,还为园区的可持续发展奠定了坚实基础。 产业服务升级,激发创新活力 园区智慧化建设不仅关注基础设施和运营管理的升级,更重视产业服务的创新。通过整合平台资源、园区本地资源和外围资源,打造园区服务资源池,为园区内的企业和个人提供了全面的智慧管理、智慧工作和智慧生活服务。特别是工业互联网平台和工业云服务的建设,为园区内的企业提供了轻量化、智能化的生产服务。这些服务涵盖了车间信息化管理、云制造执行、云智能仓储、设备健康管理等多个方面,有效提升了企业的生产效率和竞争力。此外,通过产业经济分析系统,园区还能够对潜在客户进行挖掘、对经销商进行风控、对产品销量进行预测等,为企业的市场营销提供了有力支持。这些创新的产业服务,不仅激发了园区的创新活力,还为区域经济的转型升级注入了新的动力。总之,园区智慧化建设是一场深刻的变革,它正以前所未有的方式重塑着园区的生态、运营和服务模式,为园区的可持续发展开辟了广阔的前景。

    地理信息系统中4326与3857坐标系的特性及其应用场景解析

    内容概要:本文对比了EPSG:4326(WGS 84)坐标系和EPSG:3857(Web Mercator)坐标系的主要特征。4326是一种基于经度和纬度的地理坐标系统(GCS),它的坐标用度作为单位,在地理定位方面有较高准确性。相比之下,3857属于一种投影坐标系统(PCS), 该系统内的坐标用平面直角坐标的X/Y轴以米为单位进行测量,在线地图应用领域尤为普及,但是,在高维度的两极地区则会存在一定的失真。 适用人群:对地理信息系统(GIS)、地图制图以及空间数据有兴趣的技术人员和爱好者。 使用场景及目标:帮助读者明白这两种不同坐标系统的特性和优缺点,以便于正确选择适当的坐标系以满足各种空间数据分析和服务需求,比如创建精准的全球定位系统应用程序或者开发高质量的地图展示网站。 其他说明:理解这两者的区别对于确保地理位置数据准确转换及呈现至关重要。无论是从事地图制作还是相关软件的开发者都需要熟悉这两个坐标系的基础知识。

    这是一个yolo3keras的源码可以用于训练自己的模型.zip

    python、yolo、pytorch

    图像识别_PyTorch_宠物分类_网页应用_1741785391.zip

    图像处理项目实战

    识别车牌的一个小demo.zip

    车牌识别

    小程序 礼物说2.4.2 后台模块+前端小程序源码.zip

    源码介绍 更新动态: 版本号:2.4.2 – 礼物说 修复商品下架前端还显示的问题 版本号:2.4.1 – 礼物说 前端分类更新 版本号:2.3 – 礼物说 更改授权方式 版本号:2.2 – 礼物说 修复送给好友礼物,好友不显示的问题

    机器视觉—AI算法模型介绍.pdf

    人工智能、大语言模型相关学习资料

Global site tag (gtag.js) - Google Analytics