入式应用程序(5)
时间:2011-08-27 IBM Sam Lo
在扩展 org.eclipse.ercp.eworkbench.applications 之后,我们将创建 TreeViewer 实 例并与生成的 SampleView 类的 createPartControl 方法中的当前复合内容关联 起来。然后设定此树的期望布局并向此 TreeViewer 中添加树内容提供程序和树 标签提供程序实例。内容提供程序将提供所有树的父子节点关系,而标签提供程 序将提供每个元素所表示的图像和文本。最后,为这个 TreeViewer 给定一个输 入节点。记住,此输入节点应当是数据模型的根节点。例如,我们将先创建根节 点并向其中添加三个 NBATeamNode 作为另一个球队名称。然后,我们将使用变量 NBAPlayer 将五个首发上场的 NBA 球员添加到每个球队中。正如您可以看到的那 样,我们把名为 “root” 的根 NBATeamNode 输入到 TreeViewer 中 。
清单 2. SampleView 类
public void createPartControl (Composite parent){
composite= new Composite (parent,SWT.NONE);
composite.setLayout(new GridLayout (1,false));
treeviewer = new TreeViewer(composite);
treeviewer.getTree().setLayoutData(new GridData (GridData.FILL_BOTH));
treeviewer.setContentProvider(new SampleTreeContentProvider());
treeviewer.setLabelProvider(new SampleTreeLabelProvider());
treeviewer.setInput(getInput());
treeviewer.expandAll();
}
private NBATeamNode getInput(){
NBATeamNode root = new NBATeamNode("root");
NBATeamNode team1= new NBATeamNode("Houston Rockets");
NBATeamNode team2= new NBATeamNode("LA Lakers");
...
root.addTeam(team1);
root.addTeam(team2);
...
team1.addPlayer(new NBAPlayer("Yao Ming"));
team1.addPlayer(new NBAPlayer("Tracy McGrady"));
...
return root;
}
树内容提供程序必须实现 ITreeContentProvider。使用 getParent 和 getChildren 方法定义此树的父子 节点关系。最后,使用 getElements 方法获得每个元素的子元素。
清单 3. TreeViewerContentProvider
public class SampleTreeContentProvider implements ITreeContentProvider {
//other methods are not mentioned here are unchanged
public Object[] getChildren(Object arg0) {
if(arg0 instanceof NBATeamNode) {
NBATeamNode node = (NBATeamNode)arg0;
return concat(node.getteams().toArray (),node.getplayers().toArray());
}
return EMPTY_ARRAY;
}
protected Object[] concat(Object[] object, Object[] more) {
Object[] both = new Object [object.length + more.length];
System.arraycopy(object, 0, both, 0, object.length);
System.arraycopy(more, 0, both, object.length, more.length);
return both;
}
public Object getParent(Object arg0) {
return ((NBATeamNode) arg0).getParent();
}
public Object[] getElements(Object arg0) {
return getChildren(arg0);
}
用eJFace开发嵌入式应用程序(6)
时间:2011-08-27 IBM Sam Lo
树标签提供程序必须实现 ILabelProvider。正如您可以看到 的那样,我们将使用 getImage 和 getText 方法定义每个节点所表示的图像和文 本。
清单 4. TreeViewerLabelProvider
public class SampleTreeLabelProvider implements ILabelProvider
|