特性页面与首选项页面很相似。它们的主要区别是特性页面是与特定资源相关联,而首选项是与插件本身相关联。
可以通过使用 org.eclipse.ui.propertyPages 扩展点来为资源添加特性页面。资源的特性页面是通过使用资源导航器视图中的特性菜单来调用的。选择单个资源时,此菜单就可用。
自述文件工具添加了两个特性页面。
<extension
point = "org.eclipse.ui.propertyPages">
<page
id="org.eclipse.ui.examples.readmetool.FilePage"
name="Readme Tool"
objectClass="org.eclipse.core.resources.IFile"
class="org.eclipse.ui.examples.readmetool.ReadmeFilePropertyPage"
nameFilter="*.readme">
</page>
<page
id="org.eclipse.ui.examples.readmetool.FilePage2"
name="More Readme Info"
objectClass="org.eclipse.core.resources.IFile"
class="org.eclipse.ui.examples.readmetool.ReadmeFilePropertyPage2"
nameFilter="*.readme">
</page>
</extension>
这两个页面都是为类型为 IFile,文件扩展名为 .readme 的对象而添加的。
除了没有特性页面的层次结构或分类之外,特性页面看起来很象首选项页面。在下面的对话框中,自述文件特性页面都出现在页面的主列表中。
当工作台创建和启动特性页面时,它将所选的资源设置到页面中。页面可以使用 getElement() 方法来获取它的元素 IAdaptable。
创建特性页面的模式类似于创建首选项页面的模式,因此我们将重点放在它们的区别上。特性页面显示有关它们的元素的信息。可以通过访问元素来获得此信息,以便查询或计算相关信息。还可以根据资源的特性来存储和检索信息。
ReadmeFilePropertyPage 使用它的元素来计算它的大多数信息。以下代码片段说明小节数是如何计算和显示在标号中的。
...
IResource resource = (IResource) getElement();
...
IAdaptable sections = getSections(resource);
if (sections instanceof AdaptableList) {
AdaptableList list = (AdaptableList)sections;
label = createLabel(panel, String.valueOf(list.size()));
...
计算特性时,不需要相应的逻辑就可以保存值,原因是用户不能更新此值。
特性页面常用于查看和设置资源的特定于应用程序的特性。(有关会话和持久特性的讨论,参见资源特性。) 由于特性页面知道它的资源,因此,可在页面中使用资源 API 来初始化控件值或者根据用户在特性页面中的选择来设置新的特性值。
以下代码片段说明根据特性页面的元素的特性来初始化复选框值。
private void initializeValues() {
...
IResource resource = (IResource) getElement();
label.setText(resource.getPersistentProperty("MyProperty"));
...
}
用于将复选框值保存回特性的相应代码为如下所示:
private void storeValues() {
...
IResource resource = (IResource) getElement();
resource.setPersistentProperty("MyProperty",
label.getText());
...
}