Tree中增加图像

原来程序:Snippet220

程序说明:

1,newItem.setData(image);  将Item和Image关联起来。

2,SWT.MeasureItem; 计算Item应该画多大,就是计算好了画多大后,在加上Image的宽度,这里要注意的是改变event.width的宽度就改变的项的宽度了。

3,SWT.PaintItem; 画上设置的图像。

 

 

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

		/*
		 * NOTE: MeasureItem and PaintItem are called repeatedly.  Therefore it is
		 * critical for performance that these methods be as efficient as possible.
		 */
		tree.addListener(SWT.MeasureItem, new Listener() {
			public void handleEvent(Event event) {
				TreeItem item = (TreeItem)event.item;
				Image trailingImage = (Image)item.getData();
				if (trailingImage != null) {
					event.width += trailingImage.getBounds().width + IMAGE_MARGIN;
				}
			}
		});
		tree.addListener(SWT.PaintItem, new Listener() {
			public void handleEvent(Event event) {
				TreeItem item = (TreeItem)event.item;
				Image trailingImage = (Image)item.getData();
				if (trailingImage != null) {
					int x = event.x + event.width + IMAGE_MARGIN;
					int itemHeight = tree.getItemHeight();
					int imageHeight = trailingImage.getBounds().height;
					int y = event.y + (itemHeight - imageHeight) / 2;
					event.gc.drawImage(trailingImage, x, y);
				}
			}
		});
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) display.sleep();
		}
		// Image should disposed by who created it.
		image.dispose();
		display.dispose();
	}

	private static Image drawImage(Display display) {
		Image 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();
		return xImage;
	}
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值