SWT Jface Eclipse Java

/*
 * (c) Copyright IBM Corp. 2000, 2001. All Rights Reserved.
 */
import java.util.Hashtable;
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TypedListener;
public class SpinnerTest {
  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new RowLayout());
    final Spinner spinner = new Spinner(shell, 0);
    spinner.setMaximum(999);
    System.out.println("max set to " + spinner.getMaximum());
    spinner.setSelection(500);
    System.out.println("selection set to " + spinner.getSelection());
    spinner.setMinimum(100);
    System.out.println("min set to " + spinner.getMinimum());
    Font font = new Font(display, "Courier", 20, SWT.NORMAL);
    spinner.setFont(font);
    spinner.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        System.out.println(spinner.getSelection());
      }
    });
    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    font.dispose();
  }
}
class Spinner extends Composite {
  int handleSpinner;
  static Hashtable table = new Hashtable();
  static {
    System.loadLibrary("spinner");
  }
  public Spinner(Composite parent, int style) {
    super(parent, style);
    int handleParent = handle;
    handleSpinner = createControl(handleParent);
    if (handleSpinner == 0)
      SWT.error(SWT.ERROR_NO_HANDLES);
    table.put(new Integer(handleSpinner), this);
    addDisposeListener(new DisposeListener() {
      public void widgetDisposed(DisposeEvent e) {
        Spinner.this.widgetDisposed(e);
      }
    });
    addControlListener(new ControlAdapter() {
      public void controlResized(ControlEvent e) {
        Spinner.this.controlResized(e);
      }
    });
    addFocusListener(new FocusAdapter() {
      public void focusGained(FocusEvent e) {
        Spinner.this.focusGained(e);
      }
    });
    Font font = getFont();
    setFont(handleSpinner, font.handle);
  }
  public void setFont(Font font) {
    super.setFont(font);
    int hFont = 0;
    if (font != null)
      hFont = font.handle;
    setFont(handleSpinner, hFont);
  }
  public int getSelection() {
    checkWidget();
    return getPosition(handleSpinner);
  }
  public void setSelection(int selection) {
    checkWidget();
    setPosition(handleSpinner, selection);
  }
  public void setMaximum(int maximum) {
    checkWidget();
    setMaximum(handleSpinner, maximum);
  }
  public int getMaximum() {
    checkWidget();
    return getMaximum(handleSpinner);
  }
  public void setMinimum(int minimum) {
    checkWidget();
    setMinimum(handleSpinner, minimum);
  }
  public int getMinimum() {
    checkWidget();
    return getMinimum(handleSpinner);
  }
  public void widgetDisposed(DisposeEvent e) {
    table.remove(new Integer(handleSpinner));
    handleSpinner = 0;
  }
  public void controlResized(ControlEvent e) {
    Rectangle rect = getClientArea();
    resizeControl(handleSpinner, rect.x, rect.y, rect.width, rect.height);
  }
  public void focusGained(FocusEvent e) {
    setFocus(handleSpinner);
  }
  public Point computeSize(int wHint, int hHint, boolean changed) {
    checkWidget();
    int[] result = new int[2];
    computeSize(handleSpinner, result);
    if (wHint != SWT.DEFAULT)
      result[0] = wHint;
    if (hHint != SWT.DEFAULT)
      result[1] = hHint;
    int border = getBorderWidth();
    return new Point(result[0] + border * 2, result[1] + border * 2);
  }
  public void addSelectionListener(SelectionListener listener) {
    if (listener == null)
      throw new SWTError(SWT.ERROR_NULL_ARGUMENT);
    addListener(SWT.Selection, new TypedListener(listener));
  }
  static void widgetSelected(int handle) {
    Spinner spinner = (Spinner) table.get(new Integer(handle));
    if (spinner == null)
      return;
    spinner.notifyListeners(SWT.Selection, new Event());
  }
  /** ********* JAVA NATIVES *********** */
  static final native int createControl(int handle);
  static final native void computeSize(int handle, int[] result);
  static final native void resizeControl(int handle, int x, int y, int width,
      int height);
  static final native void setPosition(int handle, int position);
  static final native int getPosition(int handle);
  static final native void setMaximum(int handle, int max);
  static final native int getMaximum(int handle);
  static final native void setMinimum(int handle, int min);
  static final native int getMinimum(int handle);
  static final native void setFont(int handle, int hFont);
  static final native void setFocus(int handle);
}