SWT Jface Eclipse Java

import java.io.File;
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.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 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());
    tbv.setLabelProvider(new FileTableLabelProvider());
    TableColumn column = new TableColumn(tbv.getTable(), SWT.LEFT);
    column.setText("Name");
    column.setWidth(200);
    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);
      }
    });
    return sash_form;
  }
  public static void main(String[] args) {
    Explorer w = new Explorer();
    w.setBlockOnOpen(true);
    w.open();
    Display.getCurrent().dispose();
  }
}
class FileTreeLabelProvider extends LabelProvider {
  public String getText(Object element) {
    return ((File) element).getName();
  }
}
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 null;
  }
  public void dispose() {
  }
  public void inputChanged(Viewer viewer, Object old_input, Object new_input) {
  }
}
class FileTableLabelProvider implements ITableLabelProvider {
  public String getColumnText(Object obj, int i) {
    return ((File) obj).getName();
  }
  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 arg0, int arg1) {
    return null;
  }
}
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) {
  }
}