扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 来源:中国IT实验室 2007年9月30日
关键字:
在本页阅读全文(共3页)
实现文件表查看器内容提供程序
让我们考虑内容提供程序。这一次,根元素比树查看器根元素简单。表查看器仅仅期望根对象有许多子元素,因此要实现的唯一有趣方法是获取子元素的方法:
public Object[] getElements(Object rootElement)
要实现的接口是 IStructuredContentProvider。
根对象是一个文件夹;其子元素是该文件夹包含的文件/文件夹。因此我们的文件表内容提供程序类与清单 8 类似。
清单 8. FileTableContentProvider(版本 1)
import java.io.*;
import org.eclipse.jface.viewers.*;
public class FileTableContentProvider implements IStructuredContentProvider
{
public Object[] getElements(Object element)
{
Object[] kids = null;
kids = ((File) element).listFiles();
return kids == null ? new Object[0] : kids;
}
public void dispose()
{
}
public void inputChanged(Viewer viewer, Object old_object, Object new_object)
{
}
}
因此我们现在有两个查看器:树查看器和表查看器。为了将它们相邻地安置在一起,我们创建了 SWT SashForm 窗口构件。该窗口构件用一个用户可以调节的边框分隔其子元素。然后,我们将树和表添加到框格表单(sash form)(图 12)。
接下来要做的是使表查看器查看用户在树查看器中选中的每个文件夹。要做到这一点,我们必须侦听事件。
侦听事件
当用户在树查看器中选中一项时,树查看器发出 SelectionChangedEvent 事件。我们需要侦听该事件,当发出该事件时,需要将表的输入设置为树查看器中当前选中的文件。为了侦听来自树查看器的选择更改事件,我们使用下面的方法:
public void addSelectionChangedListener
(ISelectionChangedListener listener)
当用户选中/取消选中树查看器中的节点时,用下面的方法调用选择更改侦听器:
public void selectionChanged(SelectionChangedEvent event)
为了实现该侦听器类,我们将在主资源管理器窗口中编码一个匿名类。在 selectionChanged() 方法中,我们将需要获得刚选中的对象,并使其成为表查看器的输入。将所有的工作组合在一起,就得到了清单 9。
清单 9. Explorer(版本 3)
import java.io.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.jface.window.*;
import org.eclipse.swt.*;
import org.eclipse.swt.custom.*;
import org.eclipse.swt.widgets.*;
public class Explorer extends ApplicationWindow
{
public Explorer()
{
super(null);
}
protected Control createContents(Composite parent)
{
SashForm sash_form = new SashForm(parent, SWT.HORIZONTAL | SWT.NULL);
TreeViewer tv = new TreeViewer(sash_form);
tv.setContentProvider(new FileTreeContentProvider());
tv.setLabelProvider(new FileTreeLabelProvider());
tv.setInput(new File("C:\\"));
final TableViewer tbv = new TableViewer(sash_form, SWT.BORDER);
tbv.setContentProvider(new FileTableContentProvider());
tv.addSelectionChangedListener(new ISelectionChangedListener()
{
public void selectionChanged(SelectionChangedEvent event)
{
IStructuredSelection selection =
(IStructuredSelection) event.getSelection();
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者