eclipshine

Eclipse主题站

如何从TableViewer的Table中取出对应于某个TableItem的对象

TableViewer可以方便的将一个模型对象,转换成对应的Table的显示。而有时候,我们只能得到Table中的TableItem对象,而无法 直接通过TableViewer的getSelection()来得到模型对象,这时候要如何来得到模型对象呢?例如,在table的 MouseTrackListener的事件中,可以通过鼠标事件的x,y,以及table的getTableItem(Point)来得到一个 TableItem,但是无法得到TableViewer的Selection。这时候,问题就来了。很显然,TableItem和模型对象是一一对应 的,因此,从TableItem得到模型对象显然也是可行的。

实际上,我们都知道每一个Widget都有一个data字段,可以被赋予任何类型的对象。在TableViewer中,TableItem的这个字段所赋予的就是模型对象。因此,只需要调用TableItem的getDate(),既可以得到其对应的模型对象了。

对于大部分的Viewer大致如此。但是我所知道的例外的,是TableTreeViewer,它的TableItem中的data并没有值。但是有一个 key为"TableTreeItemID"的对象,这返回的是一个TableTreeItem,在由这个TableTreeItem的getData(),即可以得到模型对象了。

    table.addMouseTrackListener(new MouseTrackAdapter() {
        public void mouseHover(MouseEvent e) {
            Point point = new Point(e.x, e.y);
            TableItem item = table.getItem(point);
            if (item==null)return;
            TableTreeItem data2 = (TableTreeItem) item.getData("TableTreeItemID");
            Object data3 = data2.getData();
            if (data3 instanceof IAttributeDescriptor) {
                IAttributeDescriptor iac =(IAttributeDescriptor)data3;
                table.setToolTipText(iac.getAttributeDescription());
            }
        }
    });

不过在3.1中,TableTree和TableTreeViewer都已经被deprecated了,因此这也不会有很大的问题。

posted on 2005-09-21 10:32 Living Not Striving 阅读(2003) 评论(0)  编辑  收藏 所属分类: RCP


只有注册用户登录后才能发表评论。


网站导航: