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了,因此这也不会有很大的问题。