这几天做项目,遇到一个问题:希望能使checkbox tree的某个节点不可编辑。查了一些资料发现,TreeItem本身不具备这个功能,因此只能自己写代码来实现不可编辑的效果
实现的方法有很多,下面介绍一下我使用的方法
(1)实现checkbox的不可编辑:当监听到check事件时,将checkbox的选中状态置为当前状态的相反状态。这句话是不是有点绕,看看下面的代码就明白了
final Tree tree = new Tree(parent,SWT.BORDER|SWT.V_SCROLL|SWT.H_SCROLL);
// Attach a listener directly after the creation
tree.addListener(SWT.Selection,new Listener() {
public void handleEvent(Event event) {
if( event.detail == SWT.CHECK ) {
event.detail = SWT.NONE;
event.type = SWT.None;
event.doIt = false;
try {
tree.setRedraw(false);
TreeItem item = (TreeItem)tree.item;
item.setChecked(! item.getChecked() );
} finally {
tree.setRedraw(true);
}
}
}
});
(2)在外观上实现节点灰化:这个比较简单,用TreeItem的setForeground()/setBackground()方法即可
这样实现唯一的一个缺点是checkbox虽然不可编辑了,但是不会灰化