Tree中增加图像
  sAAkk3Vxfaa8 2023年11月02日 24 0


原来程序: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;
	}
}

 

 

 


 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  tqf4faUYHHCA   2023年12月23日   99   0   0 sedpythonPythonsed
  P4Buhht98JbZ   2023年12月22日   80   0   0 sedideciciidesed
sAAkk3Vxfaa8