如何從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 閱讀(2025) 評論(0) 編輯 收藏 所屬分類: RCP