Count Numbers : ProgressBar « SWT JFace Eclipse « Java






Count Numbers

Count Numbers

/******************************************************************************
 * All Right Reserved. 
 * Copyright (c) 1998, 2004 Jackwind Li Guojie
 * 
 * Created on 2004-3-31 1:19:00 by JACK
 * $Id$
 * 
 *****************************************************************************/



import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;

public class CountNumbers {
  Display display = new Display();
  Shell shell = new Shell(display);

  Button button;
  ProgressBar progressBar;
  
  public CountNumbers() {
    GridLayout gridLayout = new GridLayout(1, true);
    shell.setLayout(gridLayout);
    
    button = new Button(shell, SWT.BORDER);
    button.setText("Start to count");    
    
    progressBar = new ProgressBar(shell, SWT.SMOOTH);
    progressBar.setMinimum(0);
    progressBar.setMaximum(10);
    
    
    final Thread countThread = new Thread(){
      public void run() {
        for(int i=0; i<=10; i++) {
          final int num = i;
          try {
            Thread.sleep(1000);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
          
          shell.getDisplay().asyncExec(new Runnable(){
            public void run() {
              if(button.isDisposed() || progressBar.isDisposed())
                return;
              button.setText("Counting: " + num);
              progressBar.setSelection(num);
              //progressBar.redraw();
            }
          });
        }
      }
    };
    
    button.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        button.setEnabled(false);
        countThread.start();
      }
    });
    
    progressBar.addPaintListener(new PaintListener() {
      public void paintControl(PaintEvent e) {
        System.out.println("PAINT");
        // string to draw. 
        String string = (progressBar.getSelection() * 1.0 /(progressBar.getMaximum()-progressBar.getMinimum()) * 100) + "%";
        
        Point point = progressBar.getSize();
        Font font = new Font(shell.getDisplay(),"Courier",10,SWT.BOLD);
        e.gc.setFont(font);
        e.gc.setForeground(shell.getDisplay().getSystemColor(SWT.COLOR_WHITE));
        
        FontMetrics fontMetrics = e.gc.getFontMetrics();
        int stringWidth = fontMetrics.getAverageCharWidth() * string.length();
        int stringHeight = fontMetrics.getHeight();
        
        e.gc.drawString(string, (point.x-stringWidth)/2 , (point.y-stringHeight)/2, true);
        font.dispose();
      }
    });
  
    button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    progressBar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    shell.setSize(300, 100);
    shell.open();
    //textUser.forceFocus();

    // Set up the event loop.
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        // If no more entries in event queue
        display.sleep();
      }
    }

    display.dispose();
  }

  private void init() {

  }

  public static void main(String[] args) {
    new CountNumbers();
  }
}


           
       








Related examples in the same category

1.A progress bar dialogA progress bar dialog
2.Update a SWT progress bar (from another thread)Update a SWT progress bar (from another thread)
3.Update a progress bar (from the UI thread)Update a progress bar (from the UI thread)
4.ProgressBar ExamplesProgressBar Examples
5.Demonstrates ProgressBarDemonstrates ProgressBar
6.ProgressBar ExampleProgressBar Example