Eclipse设计实现可重用的SWT构件

http://tech.ddvip.com   2008年01月10日    社区交流

内容摘要:本文从创建一个简单的SWT Tree Table开始,引入可重用的用户界面构件这个开发人员普遍关心的问题,然后分析Eclipse的用户界面的一些设计模式,循序渐进的向读者展示了如何设计实现一个精巧的高度可重用的TreeTable构件,最终通过增加一些扩展的功能显示了该构件强大的可扩展能力和灵活性。

  TreeTableViewer 的构造函数中需要一个 ITreeTableAdapterFactory作为参数,这是一个适配器工厂(参见《设计模式:可复用面向对象软件的基础》中的适配器工厂模式),主要根据每一行的对象获取到相应的ITreeTableAdapter作为行控制器。这个控制器主要用在了默认的TreeTableContentProvider中,详见清单6。

  清单6:TreeTableContentProvider的代码

public class TreeTableContentProvider extends ArrayContentProvider
implements ITreeContentProvider {
 private ITreeTableAdapterFactory adapterfactory;
 public TreeTableContentProvider(ITreeTableAdapterFactory adapterfactory) {
  this.adapterfactory = adapterfactory;
 }
 public Object[] getChildren(Object parentElement) {
  return ((ITreeTableAdapter) adapterfactory.getAdapter(parentElement))
.getChildren(parentElement);
 }
 public Object getParent(Object element) {
  return ((ITreeTableAdapter) adapterfactory.getAdapter(element))
.getParent(element);
 }
 public boolean hasChildren(Object element) {
  return getChildren(element).length > 0;
 }
}

  使用ITreeTableAdapter实现行控制

  ITreeTableAdapter的接口很简单,它参考了IworkbenchAdapter接口的设计,实现了TreeTable中的行逻辑的控制,详见清单7。

  清单7:ITreeTableAdapter的代码

public interface ITreeTableAdapter {
public Object[] getChildren(Object o);
public Object getParent(Object o);
  public Color getBackgroundColor(Object element); 
}

作者:翁长河    责编:豆豆技术应用

正在加载评论...