SWT Jface Eclipse Java

//Send questions, comments, bug reports, etc. to the authors:
//Rob Warner (rwarner@interspatial.com)
//Robert Harris (rbrt_harris@yahoo.com)
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
/**
 * This class implements a web browser
 */
public class AdvancedBrowser {
  // The "at rest" text of the throbber
  private static final String AT_REST = "Ready";
  /**
   * Runs the application
   * 
   * @param location the initial location to display
   */
  public void run(String location) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setText("Advanced Browser");
    createContents(shell, location);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }
    display.dispose();
  }
  /**
   * Creates the main window's contents
   * 
   * @param shell the main window
   * @param location the initial location
   */
  public void createContents(Shell shell, String location) {
    shell.setLayout(new FormLayout());
    // Create the composite to hold the buttons and text field
    Composite controls = new Composite(shell, SWT.NONE);
    FormData data = new FormData();
    data.top = new FormAttachment(0, 0);
    data.left = new FormAttachment(0, 0);
    data.right = new FormAttachment(100, 0);
    controls.setLayoutData(data);
    // Create the status bar
    Label status = new Label(shell, SWT.NONE);
    data = new FormData();
    data.left = new FormAttachment(0, 0);
    data.right = new FormAttachment(100, 0);
    data.bottom = new FormAttachment(100, 0);
    status.setLayoutData(data);
    // Create the web browser
    final Browser browser = new Browser(shell, SWT.BORDER);
    data = new FormData();
    data.top = new FormAttachment(controls);
    data.bottom = new FormAttachment(status);
    data.left = new FormAttachment(0, 0);
    data.right = new FormAttachment(100, 0);
    browser.setLayoutData(data);
    // Create the controls and wire them to the browser
    controls.setLayout(new GridLayout(7, false));
    // Create the back button
    Button button = new Button(controls, SWT.PUSH);
    button.setText("Back");
    button.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent event) {
        browser.back();
      }
    });
    // Create the forward button
    button = new Button(controls, SWT.PUSH);
    button.setText("Forward");
    button.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent event) {
        browser.forward();
      }
    });
    // Create the refresh button
    button = new Button(controls, SWT.PUSH);
    button.setText("Refresh");
    button.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent event) {
        browser.refresh();
      }
    });
    // Create the stop button
    button = new Button(controls, SWT.PUSH);
    button.setText("Stop");
    button.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent event) {
        browser.stop();
      }
    });
    // Create the address entry field and set focus to it
    final Text url = new Text(controls, SWT.BORDER);
    url.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    url.setFocus();
    // Create the go button
    button = new Button(controls, SWT.PUSH);
    button.setText("Go");
    button.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent event) {
        browser.setUrl(url.getText());
      }
    });
    // Create the animated "throbber"
    Label throbber = new Label(controls, SWT.NONE);
    throbber.setText(AT_REST);
    // Allow users to hit enter to go to the typed URL
    shell.setDefaultButton(button);
    // Add event handlers
    browser.addCloseWindowListener(new AdvancedCloseWindowListener());
    browser.addLocationListener(new AdvancedLocationListener(url));
    browser.addProgressListener(new AdvancedProgressListener(throbber));
    browser.addStatusTextListener(new AdvancedStatusTextListener(status));
    // Go to the initial URL
    if (location != null) {
      browser.setUrl(location);
    }
  }
  /**
   * This class implements a CloseWindowListener for AdvancedBrowser
   */
  class AdvancedCloseWindowListener implements CloseWindowListener {
    /**
     * Called when the parent window should be closed
     */
    public void close(WindowEvent event) {
      // Close the parent window
      ((Browser) event.widget).getShell().close();
    }
  }
  /**
   * This class implements a LocationListener for AdvancedBrowser
   */
  class AdvancedLocationListener implements LocationListener {
    // The address text box to update
    private Text location;
    /**
     * Constructs an AdvancedLocationListener
     * 
     * @param text the address text box to update
     */
    public AdvancedLocationListener(Text text) {
      // Store the address box for updates
      location = text;
    }
    /**
     * Called before the location changes
     * 
     * @param event the event
     */
    public void changing(LocationEvent event) {
      // Show the location that's loading
      location.setText("Loading " + event.location + "...");
    }
    /**
     * Called after the location changes
     * 
     * @param event the event
     */
    public void changed(LocationEvent event) {
      // Show the loaded location
      location.setText(event.location);
    }
  }
  /**
   * This class implements a ProgressListener for AdvancedBrowser
   */
  class AdvancedProgressListener implements ProgressListener {
    // The label on which to report progress
    private Label progress;
    /**
     * Constructs an AdvancedProgressListener
     * 
     * @param label the label on which to report progress
     */
    public AdvancedProgressListener(Label label) {
      // Store the label on which to report updates
      progress = label;
    }
    /**
     * Called when progress is made
     * 
     * @param event the event
     */
    public void changed(ProgressEvent event) {
      // Avoid divide-by-zero
      if (event.total != 0) {
        // Calculate a percentage and display it
        int percent = (int) (event.current / event.total);
        progress.setText(percent + "%");
      } else {
        // Since we can't calculate a percent, show confusion :-)
        progress.setText("???");
      }
    }
    /**
     * Called when load is complete
     * 
     * @param event the event
     */
    public void completed(ProgressEvent event) {
      // Reset to the "at rest" message
      progress.setText(AT_REST);
    }
  }
  /**
   * This class implements a StatusTextListener for AdvancedBrowser
   */
  class AdvancedStatusTextListener implements StatusTextListener {
    // The label on which to report status
    private Label status;
    /**
     * Constructs an AdvancedStatusTextListener
     * 
     * @param label the label on which to report status
     */
    public AdvancedStatusTextListener(Label label) {
      // Store the label on which to report status
      status = label;
    }
    /**
     * Called when the status changes
     * 
     * @param event the event
     */
    public void changed(StatusTextEvent event) {
      // Report the status
      status.setText(event.text);
    }
  }
  /**
   * The application entry point
   * 
   * @param args the command line arguments
   */
  public static void main(String[] args) {
    new AdvancedBrowser().run(args.length == 0 ? null : args[0]);
  }
}