CountNumbers.java Source code

Java tutorial

Introduction

Here is the source code for CountNumbers.java

Source

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