Java tutorial
import java.io.File; import java.net.MalformedURLException; import java.net.URL; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.TableColumn; public class JFaceExplorer extends ApplicationWindow { public JFaceExplorer() { super(null); addStatusLine(); } protected Control createContents(Composite parent) { getShell().setText("JFace File Explorer"); 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:\\")); tv.addFilter(new AllowOnlyFoldersFilter()); final TableViewer tbv = new TableViewer(sash_form, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI); tbv.setContentProvider(new FileTableContentProvider()); tbv.setLabelProvider(new FileTableLabelProvider()); tbv.setSorter(new FileSorter()); TableColumn column = new TableColumn(tbv.getTable(), SWT.LEFT); column.setText("Name"); column.setWidth(200); column = new TableColumn(tbv.getTable(), SWT.RIGHT); column.setText("Size"); column.setWidth(100); tbv.getTable().setHeaderVisible(true); tv.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection selection = (IStructuredSelection) event.getSelection(); Object selected_file = selection.getFirstElement(); tbv.setInput(selected_file); } }); tbv.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection selection = (IStructuredSelection) event.getSelection(); setStatus("Number of items selected is " + selection.size()); } }); return sash_form; } public static void main(String[] args) { JFaceExplorer w = new JFaceExplorer(); w.setBlockOnOpen(true); w.open(); Display.getCurrent().dispose(); } } class Util { private static ImageRegistry image_registry; public static URL newURL(String url_name) { try { return new URL(url_name); } catch (MalformedURLException e) { throw new RuntimeException("Malformed URL " + url_name, e); } } public static ImageRegistry getImageRegistry() { if (image_registry == null) { image_registry = new ImageRegistry(); image_registry.put("folder", ImageDescriptor.createFromURL(newURL("file:icons/folder.gif"))); image_registry.put("file", ImageDescriptor.createFromURL(newURL("file:icons/file.gif"))); } return image_registry; } } class FileTreeLabelProvider extends LabelProvider { public String getText(Object element) { return ((File) element).getName(); } public Image getImage(Object element) { if (((File) element).isDirectory()) { return Util.getImageRegistry().get("folder"); } else { return Util.getImageRegistry().get("file"); } } } class FileTreeContentProvider implements ITreeContentProvider { public Object[] getChildren(Object element) { Object[] kids = ((File) element).listFiles(); return kids == null ? new Object[0] : kids; } public Object[] getElements(Object element) { return getChildren(element); } public boolean hasChildren(Object element) { return getChildren(element).length > 0; } public Object getParent(Object element) { return ((File) element).getParent(); } public void dispose() { } public void inputChanged(Viewer viewer, Object old_input, Object new_input) { } } class FileTableLabelProvider implements ITableLabelProvider { public String getColumnText(Object element, int column_index) { if (column_index == 0) { return ((File) element).getName(); } if (column_index == 1) { return "" + ((File) element).length(); } return ""; } public void addListener(ILabelProviderListener ilabelproviderlistener) { } public void dispose() { } public boolean isLabelProperty(Object obj, String s) { return false; } public void removeListener(ILabelProviderListener ilabelproviderlistener) { } public Image getColumnImage(Object element, int column_index) { if (column_index != 0) { return null; } if (((File) element).isDirectory()) { return Util.getImageRegistry().get("folder"); } else { return Util.getImageRegistry().get("file"); } } } 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) { } } class FileSorter extends ViewerSorter { public int category(Object element) { return ((File) element).isDirectory() ? 0 : 1; } } class AllowOnlyFoldersFilter extends ViewerFilter { public boolean select(Viewer viewer, Object parent, Object element) { return ((File) element).isDirectory(); } }