在setInput()之前保存TreeViewer状态

时间:2009-10-16 07:07:38

标签: java eclipse user-interface jface treeviewer

我正在尝试保存JFace TreeViewer扩展状态,以便在调用setInput()方法后刷新它。我尝试getExpandedElements的{​​{1}},setExpandedElementsgetExpandedTreePathssetExpandedTreePaths方法,但它不起作用。

TreeViewer

2 个答案:

答案 0 :(得分:10)

您需要确保TreeViewer的内容提供商提供正确定义hashCodeequals方法的对象。 AbstractTreeViewer需要能够比较旧对象和新对象以确定其扩展状态。如果未提供hashCodeequals,则这是一个简单的参考检查,如果您重新创建了内容,则无效。

答案 1 :(得分:3)

this thread中所述,请查看已故的ResourceNavigator org.eclipse.ui.views.navigator包。
(“迟到”因为该类不再直接使用,请参阅Eclipse Wiki)。

alt text(见eclipse Java Model

  

它使用TreeViewer,并保存扩展元素和所选元素以及其他状态   模型元素是IResource个对象,使用IPersistableElement / IElementFactory机制保留。   IPersistableElement适配器已在类IResource中针对WorkbenchAdapter注册,但这可以通过直接实现IPersistableElement的模型元素获取。   相应的IElementFactoryelementFactory的{​​{1}}的{​​{1}}扩展名中声明。

     

已恢复的资源知道如何通过树的内容提供者获取自己的子级(和父级),因此不需要保留树的所有元素。

     

可以使用类似的方法来保存查看者的输入资源   对于org.eclipse.ui.ide,通过其plugin.xml的当前帧有一个间接级别,但是如果你在调试器中单步执行它,你会发现它基本上做同样的事情。


小提取(但其余代码也保存了许多其他内容,包括选择)

ResourceNavigator