`

学习定制表格树的项(二)

阅读更多

表格和树的项只可以有一个图像,而且这个图像只能够画在图像的前面。

学习了定制表格和树的项后,觉得前面也可以定制多个图像了。

 

例子:

public class Snippet300 {
	private static int IMAGE_MARGIN = 2;
	private static Image xImage;
	private static Display display;

	public static void main(String [] args) {
		display = new Display();
		Shell shell = new Shell(display);
		shell.setBounds(10, 10, 350, 200);
		createImage();
		final Tree tree = new Tree(shell, SWT.CHECK);
		tree.setBounds(10, 10, 300, 150);
		TreeItem item = new TreeItem(tree, SWT.NONE);
		item.setImage(xImage);
		item.setText("root item");
		for (int i = 0; i < 4; i++) {
			TreeItem newItem = new TreeItem(item, SWT.NONE);
			newItem.setText("descendent " + i);
			//			if (i % 2 == 0) {
			//				newItem.setData(xImage);
			//			}
			newItem.setImage(xImage);
			item.setExpanded(true);
			item = newItem;
		}
		treeAddListener(tree);

		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) display.sleep();
		}
		xImage.dispose();
		display.dispose();
	}

	private static void createImage() {
		xImage = new Image (display, 16, 16);
		GC gc = new GC(xImage);
		gc.setForeground(display.getSystemColor(SWT.COLOR_RED));
		gc.drawLine(1, 1, 14, 14);
		gc.drawLine(1, 14, 14, 1);
		gc.drawOval(2, 2, 11, 11);
		gc.dispose();
	}

	private static void treeAddListener(final Tree tree) {
		Listener listener = new Listener() {
			public void handleEvent(Event event) {
				TreeItem item = (TreeItem)event.item;
				Image image = (Image)item.getImage();
				switch(event.type) {
				case SWT.MeasureItem:
				{
					if (image == null) break;
					event.width += 2*(image.getBounds().width + IMAGE_MARGIN);
					break;
				}
				case SWT.EraseItem:
				{
					event.detail &= ~SWT.FOREGROUND;
					break;
				}
				case SWT.PaintItem:
				{
					if (image == null) break;
					int x,y;
					int itemH = tree.getItemHeight();
					int imageH = image.getBounds().height;
					int imageW = image.getBounds().width;

					// draw the 1 image
					x = event.x ;
					y = event.y + (itemH - imageH)/2;
					event.gc.drawImage(image, x, y);

					// draw the 2 image
					x += IMAGE_MARGIN + imageW;
					event.gc.drawImage(image, x, y);

					// draw the string
					String text = item.getText();
					x += IMAGE_MARGIN + imageW;
					y = event.y+2;
					event.gc.drawText(text, x, y);

					// draw the 3 image
					x += event.width - imageW;
					y = event.y + (itemH - imageH)/2;
					event.gc.drawImage(image, x, y);
					break;
				}
				}
			}
		};

		tree.addListener(SWT.MeasureItem, listener);
		tree.addListener(SWT.EraseItem, listener);
		tree.addListener(SWT.PaintItem, listener);
	}
}

 

改例子,仿照snippet220写的,运行效果,如图:



 

 

  • 大小: 12.7 KB
分享到:
评论

相关推荐

    Ztree+treeTable实现 Java实现 树形菜单 树形表格

    在Java开发中,构建用户界面时,树形菜单和树形表格是常见且重要的组件,它们可以帮助用户以层次结构的方式浏览和操作数据。本篇将详细介绍如何利用Ztree和treeTable来实现这样的功能。 Ztree是一款基于JavaScript...

    VFP表格制作的树控件实例

    5. **美化和交互**:可以进一步定制表格的外观,如改变行高、列宽,添加图标以区分父节点和子节点,或者添加右键菜单以提供更多的操作选项。 6. **性能优化**:如果数据量较大,为了避免一次性加载所有数据导致的...

    Ext下拉树、下拉表格

    导入项目后,确保正确引用了Ext库,并根据项目的具体需求调整和定制下拉树和下拉表格的配置。如果在开发过程中遇到问题,可以查阅Ext的官方文档,那里有详尽的API参考和示例代码。同时,利用浏览器的开发者工具进行...

    QT结构树界面设计,一级部门,二级部门,人员等

    `QTreeWidget`是一个可定制的控件,提供了一个表格样式的视图,而`QTreeView`则更灵活,通常与`QAbstractItemModel`一起使用,允许自定义数据模型。在这个项目中,一级部门可能被表示为树的顶层节点,二级部门作为一...

    wpf实现DataGrid列表控件实现树形结构,并且展开控件ToggleButton可以放在任意一列,也可以冻住多列不可拖动

    在DataGrid中,我们可以定义一个HierarchicalDataTemplate来表示每一层的数据项,并设置其ItemsSource属性,使每一项都能展示其子项。 2. **ToggleButton**: 要在任意列放置展开/折叠按钮,我们可以自定义一个...

    Dhtmlx包,包含树,日历,菜单,表格等控件

    通过自定义图标、节点文本和行为,可以创建符合项目需求的定制化树形视图。 2. **日历控件(dhtmlxCalendar)**:提供一个用户友好的日期选择器,支持多种日期格式和日期范围选择。它可以与表单集成,方便用户输入...

    一个基于 vue 的 PC 端表格组件

    开发者可以通过研究这些源码来学习组件的实现原理,或者根据自己的需求对其进行二次开发。 总之,vxe-table是一款强大而全面的Vue表格组件,它的功能特性覆盖了大部分PC端表格应用的需求。无论是对于初学者还是有...

    使用jsTree实现js树形结构

    这里的 `data` 配置项定义了树的初始结构,每个对象代表一个节点,`text` 属性为节点文本,`children` 为子节点数组。 **二、jsTree 功能扩展** 1. **多态性** jsTree 支持多种数据源,如 JSON、HTML 或者 AJAX...

    ext2.0 树的增删改操作

    它提供了丰富的组件库,包括各种图表、表格、按钮、菜单、树形控件等。在这个项目中,我们主要关注的是"树的增删改操作"以及"下拉树"。 在Ext2.0中,树形控件(Tree)是一种非常实用的数据展示方式,常用于层级结构...

    WPF下的TreeTable实现示例

    在TreeView的每个项模板中,嵌入一个DataGrid,当点击TreeItem时,DataGrid会显示与该TreeItem关联的详细数据。 3. **数据绑定** WPF的强项在于数据绑定,TreeTable的实现同样依赖于数据绑定。你需要一个数据模型...

    三级树形+用户控件分配权限

    在三级树形结构中,数据被分为三个层次:顶级节点(一级)、次级节点(二级)和叶子节点(三级)。这种结构允许用户通过逐级展开节点来探索和操作数据,使得复杂的权限配置变得清晰和易于操作。 接下来是“用户控件...

    用xml 和 xsl 实现二维报表

    XML(Extensible Markup Language)和XSL(eXtensible Stylesheet Language)是Web开发中用于数据管理和格式化的关键技术。...通过学习和熟练掌握这两项技术,开发者能够构建出灵活且易于维护的数据展示系统。

    MFC树形列表和list列表简单例子

    在Microsoft Foundation Classes (MFC)库中,树形控件(CTreeCtrl)和列表控件(CListCtrl)是两种常用的用户界面组件,用于显示和管理数据。这两个控件在Windows应用程序开发中广泛应用于组织和展示信息。下面将...

    Ext4.2可增删树例子

    为了学习和使用这个例子,你可以打开Test文件查看代码,理解其工作原理,并根据自己的需求进行定制。 总结来说,Ext4.2可增删树例子通过扩展和优化Ext4.2的树组件,实现了节点leaf属性的动态调整,提升了树形结构在...

    jquery-TreeTable树型结构 源码及示例

    2. **初始化表格**:使用`$("#tableId").treetable({options})`初始化你的表格,`options`是一个包含配置项的对象。 3. **标记父节点和子节点**:在HTML表格中,通过`data-parent`属性指定父节点,`data-id`属性标识...

    树表控件(带源码)

    标题中的“树表控件(带源码)”指的是一个结合了树形结构和表格数据展示的用户界面组件,通常用于软件开发中,特别是在Windows应用程序中。这种控件允许用户以树状结构组织数据,并在每个节点下显示表格形式的相关...

    实现extjs4 的树、grid、form、query等大部分组件的功能

    例如,可以在树组件中选择一项,然后在关联的网格中显示其详细信息;或者通过表单收集用户输入,再用查询功能对数据进行筛选。在项目“bookSys”中,可能就是构建一个图书管理系统,用户可以通过树形结构浏览书籍...

    js数据可视化 随机生成表格.zip

    例如,你可以使用`document.createElement()`创建表格元素,`innerHTML`属性添加内容,`appendChild()`将元素添加到DOM树中。对于随机数据,JavaScript的内置`Math.random()`函数可以生成0到1之间的随机数,结合适当...

    TreeGrid表格

    TreeGrid表格是一种在WPF(Windows Presentation Foundation)框架下实现的高级数据展示控件,它结合了树形结构和网格视图的特点,提供了一种既能够展现层次关系又可以进行行列布局的数据展示方式。这种控件在处理...

    表头搜索组件包括说明书(无树形组件与select多选)

    无树形组件意味着这个搜索功能不包含对嵌套或层级结构数据的支持,而“无select多选”则表示在选择条件时,用户可能只能单选,无法进行多项选择。 描述中提到“源码带说明书”,意味着提供了完整的源代码和相关的...

Global site tag (gtag.js) - Google Analytics