如何從TableViewer的Table中取出對(duì)應(yīng)于某個(gè)TableItem的對(duì)象
TableViewer可以方便的將一個(gè)模型對(duì)象,轉(zhuǎn)換成對(duì)應(yīng)的Table的顯示。而有時(shí)候,我們只能得到Table中的TableItem對(duì)象,而無法 直接通過TableViewer的getSelection()來得到模型對(duì)象,這時(shí)候要如何來得到模型對(duì)象呢?例如,在table的 MouseTrackListener的事件中,可以通過鼠標(biāo)事件的x,y,以及table的getTableItem(Point)來得到一個(gè) TableItem,但是無法得到TableViewer的Selection。這時(shí)候,問題就來了。很顯然,TableItem和模型對(duì)象是一一對(duì)應(yīng) 的,因此,從TableItem得到模型對(duì)象顯然也是可行的。實(shí)際上,我們都知道每一個(gè)Widget都有一個(gè)data字段,可以被賦予任何類型的對(duì)象。在TableViewer中,TableItem的這個(gè)字段所賦予的就是模型對(duì)象。因此,只需要調(diào)用TableItem的getDate(),既可以得到其對(duì)應(yīng)的模型對(duì)象了。
對(duì)于大部分的Viewer大致如此。但是我所知道的例外的,是TableTreeViewer,它的TableItem中的data并沒有值。但是有一個(gè) key為"TableTreeItemID"的對(duì)象,這返回的是一個(gè)TableTreeItem,在由這個(gè)TableTreeItem的getData(),即可以得到模型對(duì)象了。
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都已經(jīng)被deprecated了,因此這也不會(huì)有很大的問題。
posted on 2005-09-21 10:32 Living Not Striving 閱讀(2024) 評(píng)論(0) 編輯 收藏 所屬分類: RCP