Mega Code Archive

 
Categories / Java / SWT Jface Eclipse
 

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();   } }