Eclipse 3.3里新TreeViewer给EMF应用程序带来的一个问题
以前在Eclipse 3.2里做的一个EMF应用程序,到3.3里发现一些TreeViewer里标签显示的格式不对,例如原来显示“Condition true”的,在3.3下可能显示“1”。调试了一下发现这些TreeViewer在为每个节点获得标签时,若相应的XXXItemProvider实现了ITableItemLableProvider(即应用程序里有TableViewer也用到这个XXXItemProvider)时,会调用getColumnText()而不是getText()来得到文本内容。
在新闻组里搜到这个帖子讲的是同一件事(新闻组是遇到问题后第一反应),原因不在EMF,是Eclipse 3.3里对TreeViewer的实现有了变化,新的实现把原来的TreeViewer当成只有一列的特殊的TableViewer来对待,以致EMF也把TreeViewer当成了TableViewer,当然会去找getColumnText()了。解决的办法也不复杂,新闻组里那个帖子也提到了,我给帖到这方便大家参考吧。
/** * @Added * Solve a problem raised in jface 3.3 tree viewer * @see http://dev.eclipse.org/newslists/news.eclipse.tools.emf/msg25409.html * */ class WorkaroundAdapterFactoryLabelProvider extends AdapterFactoryLabelProvider { /** * @param adapterFactory */ public WorkaroundAdapterFactoryLabelProvider(AdapterFactory adapterFactory) { super(adapterFactory); } @Override public Image getColumnImage(Object object, int columnIndex) { return super.getImage(object); } @Override public String getColumnText(Object object, int columnIndex) { return super.getText(object); } }
有了上面这个类,然后把原来setLabelProvider()里的AdapterFactoryLabelProvider换成它就可以了。EMF以后的版本应该会解决这个问题。