PC 自定义ListItem

先看看效果图:
在这里插入图片描述
代码实现主要还是用SWT去实现 自定义一个我这里叫ItemNew,这里可以去控制每一个ItemNew的点击事件,鼠标追踪事件等等,自定义方法,如设置一些显示隐藏或者去进行一些判断,绘制方法将图片以及文字绘制出来,最后一个id我是去根据id去判断需不需要绘制下划线的。

public class ItemNew implements PaintListener {
	private Composite composite;
	private Image image;
	private String title;
	private String id;
	private boolean select = false;

	public ItemNew(Composite parent, Image image, String title, String id) {
		this.title = title;
		this.image = image;
		this.id = id;
		createControl(parent);
	}

	public void createControl(Composite parent) {
		composite = new Composite(parent, SWT.NORMAL);
		composite.addPaintListener(this);
		composite.setSize(300, 48);
		composite.setCursor(SWTResourceManager.getCursor(SWT.CURSOR_HAND));
		composite.addMouseTrackListener(mouseTrackListener);
		composite.addMouseListener(new MouseListener() {
			
			@Override
			public void mouseUp(MouseEvent e) {
				// TODO Auto-generated method stub
			}
			
			@Override
			public void mouseDown(MouseEvent e) {
				// TODO Auto-generated method stub
			}
			
			@Override
			public void mouseDoubleClick(MouseEvent e) {
				// TODO Auto-generated method stub
			}
		});
		composite.addDisposeListener(new DisposeListener() {

			@Override
			public void widgetDisposed(DisposeEvent e) {
				// TODO Auto-generated method stub
				onDisposed();
			}
		});
	}

	protected void onDisposed() {
	}
	
	protected void noVisible() {
		composite.setVisible(false);
	}
	
	protected void setVisible() {
		composite.setVisible(true);
	}
	
	protected boolean isVisible() {
		if (composite.isVisible()) {
			return true;
		}
		return false;
	}

	private MouseTrackListener mouseTrackListener = new MouseTrackListener() {

		@Override
		public void mouseHover(MouseEvent e) {
		}

		@Override
		public void mouseExit(MouseEvent e) {
			composite.setBackground(SWTResourceManager.getColor(255, 255, 255));
		}

		@Override
		public void mouseEnter(MouseEvent e) {
			composite.setBackground(SWTResourceManager.getColor(219, 224, 241));
		}
	};

	@Override
	public void paintControl(PaintEvent e) {
		GC gc = e.gc;
		gc.setForeground(SWTResourceManager.getColor(230, 232, 237));
		gc.setLineWidth(1);
		if (id != "FALSE") {
			gc.drawLine(12, 47, 287, 47);
		}
			
		if (select) {
			gc.setBackground(SWTResourceManager.getColor(219, 224, 241));
			gc.fillRectangle(0, 0, 300, 48);
		}
		
		int offsetx = 0;
		int y = 0;
		int width = composite.getSize().x;
		int height = composite.getSize().y;
		if (image != null && !image.isDisposed()) {
			y = (48 - image.getBounds().height) / 2;
			gc.drawImage(image, 12, y);
			offsetx = 12 + image.getBounds().width + 6;
		}
		if (!TextUtils.isEmpty(title)) {
			int avalidW = width - offsetx - 50;
			gc.setForeground(UIConstant.DEF_COLOR);
			Font font = SWTResourceManager.getFont("微软雅黑", 10, SWT.NORMAL);
			gc.setFont(font);
			int realW = gc.stringExtent(title).x + title.length();
			String drawText = title;
			int tempW = 0;
			if (realW > avalidW) {
				for (int i = 0; i < drawText.length(); i++) {
					String tempText = drawText.substring(0, i + 1);
					tempW = gc.stringExtent(tempText).x + tempText.length();
					if (tempW > avalidW) {
						if (tempText.equals(drawText)) {
							break;
						}
						drawText = tempText + "...";
						break;
					}
				}
			}
			gc.drawText(drawText, offsetx, y - 2, true);
		}
		
		gc.dispose();
	}

	public void setSize(int width, int height) {
		composite.setSize(width, height);
	}

	public void setLocation(int x, int y) {
		composite.setLocation(x, y);
	}

	public Composite getComposite() {
		return composite;
	}

	public void setComposite(Composite composite) {
		this.composite = composite;
	}

	public Image getImage() {
		return image;
	}

	public void setImage(Image image) {
		this.image = image;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public boolean isSelect() {
		return select;
	}

	public void setSelect(boolean select) {
		this.select = select;
	}
}

在你的主类中,可以调用这个类,通过setSelect()这个方法去判断是否有选中,没有则重新绘制,不然会显示2个背景,第一次进去是有一个itemNew 默认选中有背景的。

Image staffImage = SDKGlobal.getContext().getImage(R.drawable.staff);
		staffItem = new ItemNew(secComp, staffImage, "员工", "TRUE");
		staffItem.setLocation(0, 48);
		staffItem.getComposite().addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				// TODO Auto-generated method stub
				super.mouseDown(e);
				staffItem.setSelect(true);
				if (itemNew != null && itemNew.isSelect() && itemNew != staffItem) {
					itemNew.setSelect(false);
					itemNew.getComposite().redraw();
				}
				itemNew = staffItem;
			}
		});

		Image outContactsImage = SDKGlobal.getContext().getImage(R.drawable.outContacts);
		outContactsItem = new ItemNew(secComp, outContactsImage, "外部联系人", "TRUE");
		outContactsItem.setLocation(0, 96);
		outContactsItem.getComposite().addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				// TODO Auto-generated method stub
				super.mouseDown(e);
				outContactsItem.setSelect(true);
				if (itemNew != null && itemNew.isSelect() && itemNew != outContactsItem) {
					itemNew.setSelect(false);
					itemNew.getComposite().redraw();
				}
				itemNew = outContactsItem;
			}
		});

		Image branchImage = SDKGlobal.getContext().getImage(R.drawable.branch);
		branchItem = new ItemNew(secComp, branchImage, "部门", "FALSE");
		branchItem.setLocation(0, 144);
		branchItem.getComposite().addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				// TODO Auto-generated method stub
				super.mouseDown(e);
				branchItem.setSelect(true);
				if (itemNew != null && itemNew.isSelect() && itemNew != branchItem) {
					itemNew.setSelect(false);
					itemNew.getComposite().redraw();
				}
				itemNew = branchItem;
			}
		});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十壹、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值