GWT progress bar : Progress Bar « GWT « Java

Home
Java
1.2D Graphics GUI
2.3D
3.Advanced Graphics
4.Ant
5.Apache Common
6.Chart
7.Class
8.Collections Data Structure
9.Data Type
10.Database SQL JDBC
11.Design Pattern
12.Development Class
13.EJB3
14.Email
15.Event
16.File Input Output
17.Game
18.Generics
19.GWT
20.Hibernate
21.I18N
22.J2EE
23.J2ME
24.JDK 6
25.JNDI LDAP
26.JPA
27.JSP
28.JSTL
29.Language Basics
30.Network Protocol
31.PDF RTF
32.Reflection
33.Regular Expressions
34.Scripting
35.Security
36.Servlets
37.Spring
38.Swing Components
39.Swing JFC
40.SWT JFace Eclipse
41.Threads
42.Tiny Application
43.Velocity
44.Web Services SOA
45.XML
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Java » GWT » Progress BarScreenshots 
GWT progress bar
 

/*
 * Copyright 2006 Robert Hanson <iamroberthanson AT gmail.com>
 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 
 *    http://www.apache.org/licenses/LICENSE-2.0
 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


package com.java2s.gwt.client;

import com.google.gwt.user.client.*;
import com.google.gwt.user.client.ui.*;
import com.google.gwt.core.client.*;

public class GWTClient implements EntryPoint{

  public void onModuleLoad() {
  final ProgressBar progressBar = new ProgressBar(20
             ,ProgressBar.SHOW_TIME_REMAINING
              +ProgressBar.SHOW_TEXT);
  progressBar.setText("Doing something...");
  RootPanel.get().add(progressBar);
  Timer t = new Timer() {
    public void run() {
      int progress = progressBar.getProgress()+4;
      if (progress>100cancel();
      progressBar.setProgress(progress);
    }
  };
  t.scheduleRepeating(1000);
  }

}

/**
 * <P>A simple progress bar that uses table elements to show progress
 * and with a basic time remaining calculation built in.
 
 * <P>You can optionally display some text above the progress bar
 * and/or display time remaining underneath the progress bar. To
 * control the display of those features, set the options in the
 * constructor as shown in the following usage example:
 
 * <PRE>
 *  final ProgressBar progressBar = new ProgressBar(20
 *             ,ProgressBar.SHOW_TIME_REMAINING
 *              +ProgressBar.SHOW_TEXT);
 *  progressBar.setText("Doing something...");
 *  RootPanel.get().add(progressBar);
 *  Timer t = new Timer() {
 *    public void run() {
 *      int progress = progressBar.getProgress()+4;
 *      if (progress>100) cancel();
 *      progressBar.setProgress(progress);
 *    }
 *  };
 *  t.scheduleRepeating(1000);
 * </PRE>
 *
 * <P>How the time remaining is displayed can be controlled by setting the 
 * relevant messages using the language of your choice.
 
 * <P>The default setting for the messages are as follows:
 
 * <PRE>
 *    setSecondsMessage("Time remaining: {0} Seconds");
 *    setMinutesMessage("Time remaining: {0} Minutes");
 *    setHoursMessage("Time remaining: {0} Hours");
 * </PRE>
 *
 * <P>To reset the time remaining/set the start time, simply set the 
 * progress to zero.
 
 * <P>Some basic CSS styling is available to control the text, border around the
 * progress bar itself and the colour of the progress bar elements.
 
 * <PRE>
 * .progressbar-text {
 *     font-weight: bold;
 * }
 
 * .progressbar-remaining {
 *     font-size: 12px;
 *     font-style: italic;
 * }
 
 * .progressbar-outer {
 *     border: 1px solid black;
 * }
 
 * .progressbar-inner {
 *     border: 1px solid black;
 *     margin: 1px;
 * }
 
 * .progressbar-bar {
 *     width: 5px;
 *     height: 15px;
 *     margin: 1px;
 * }
 
 * .progressbar-fullbar {
 *     background: blue;
 * }
 
 * .progressbar-blankbar {
 *     background: #eee;
 * }
 *</PRE>
 *
 * <P>You can take advantage of the default style by adding the
 * following to the head of your HTML page. 
 
 * <P>&lt;link rel="stylesheet" type="text/css" href="style/gwl-progressBar.css">
 *
 * <P>This style sheet also has two additional styles which you can use
 * by adding the stye name to the widget.  You can use either one of
 * these, or use both combined.
 
 * <PRE>
 *  ProgressBar progressBar = new ProgressBar(20);
 *  progressBar.addStyleName("progressbar-solid");
 *  progressBar.addStyleName("progressbar-noborder");
 * </PRE>
 
 @author Bjarne Matzen - Bjarne[dot]Matzen[at]gmail[dot]com
 */

class ProgressBar extends VerticalPanel {

  /**
   * Option to show text label above progress bar
   */
  public static final int SHOW_TEXT = 2;
  
  /**
   * Option to show time remaining
   */
  public static final int SHOW_TIME_REMAINING = 1;

  /**
   * The time the progress bar was started
   */
  private long startTime = System.currentTimeMillis();
  
  /**
   * The number of bar elements to show
   */
  private int elements = 20;
  
  /**
   * Time element text
   */
  private String secondsMessage = "Time remaining: {0} Seconds";
  private String minutesMessage = "Time remaining: {0} Minutes";
  private String hoursMessage = "Time remaining: {0} Hours";
  
  /**
   * Current progress (as a percentage)
   */
  private int progress = 0;
  
  /**
   * This is the frame around the progress bar
   */
  private FlexTable barFrame = new FlexTable();
  
  /**
   * This is the grid used to show the elements
   */
  private Grid elementGrid;
  
  /**
   * This is the current text label below the progress bar
   */
  private Label remainLabel = new Label();

  /**
   * This is the current text label above the progress bar
   */
  private Label textLabel = new Label();
  
  /** 
   * internal flags for options
   */
  private boolean showRemaining = false;
  private boolean showText = false;
  
  /**
   * Base constructor for this widget
   
   @param elements The number of elements (bars) to show on the progress bar
   @param options The display options for the progress bar
   */
  public ProgressBar (int elements, int options)
    {
        // Read the options and set convenience variables
        if ((options & SHOW_TIME_REMAINING== SHOW_TIME_REMAININGshowRemaining = true;
        if ((options & SHOW_TEXT== SHOW_TEXTshowText = true;
    
    // Set element count
    this.elements = elements;
    
    // Styling
    remainLabel.setStyleName("progressbar-remaining");
    textLabel.setStyleName("progressbar-text");
    
    // Initialize the progress elements
    elementGrid = new Grid(1, elements);
        elementGrid.setStyleName("progressbar-inner");
        elementGrid.setCellPadding(0);
        elementGrid.setCellSpacing(0);
        
        for (int loop = 0; loop < elements; loop++) {
            Grid elm = new Grid(11);
            //elm.setHTML(0, 0, "&nbsp;");
            elm.setHTML(00"");
            elm.setStyleName("progressbar-blankbar");
            elm.addStyleName("progressbar-bar");
            elementGrid.setWidget(0, loop, elm);
    }
    
    // Create the container around the elements
    Grid containerGrid = new Grid(1,1);
        containerGrid.setCellPadding(0);
        containerGrid.setCellSpacing(0);
    containerGrid.setWidget(00, elementGrid);
    containerGrid.setStyleName("progressbar-outer");
      //containerGrid.setBorderWidth(1);
      
      // Set up the surrounding flex table based on the options
      int row = 0;
        if (showTextbarFrame.setWidget(row++, 0, textLabel);
        barFrame.setWidget(row++, 0, containerGrid);
        if (showRemainingbarFrame.setWidget(row++, 0, remainLabel);

    barFrame.setWidth("100%");
    
    // Add the frame to the panel
    this.add(barFrame);
    
    // Initialize progress bar
    setProgress(0);
  }

  /**
   * Constructor without options
   
   @param elements The number of elements (bars) to show on the progress bar
   */
  public ProgressBar (int elements)
    {
        this(elements, 0);
    }
  
  /**
   * Set the current progress as a percentage
   
   @param percentage Set current percentage for the progress bar
   */
  public void setProgress (int percentage)
    {
    // Make sure we are error-tolerant
    if (percentage > 100percentage = 100;
        if (percentage < 0percentage = 0;
    
    // Set the internal variable
    progress = percentage;
    
    // Update the elements in the progress grid to
        // reflect the status
        int completed = elements * percentage / 100;
        for (int loop = 0; loop < elements; loop++) {
            Grid elm = (GridelementGrid.getWidget(0, loop);
            if (loop < completed) {
                elm.setStyleName("progressbar-fullbar");
                elm.addStyleName("progressbar-bar");
            }
            else {
                elm.setStyleName("progressbar-blankbar");
                elm.addStyleName("progressbar-bar");
            }
        }
    
    if (percentage > 0) {
            // Calculate the new time remaining
            long soFar = (System.currentTimeMillis() - startTime1000;
            long remaining = soFar * (100 - percentage/ percentage;
            // Select the best UOM
            String remainText = secondsMessage;
            if (remaining > 120) {
                remaining = remaining / 60;
                remainText = minutesMessage;
                if (remaining > 120) {
                    remaining = remaining / 60;
                    remainText = hoursMessage;
                }
            }
            // Locate the position to insert out time remaining
            int pos = remainText.indexOf("{0}");
            if (pos >= 0) {
                String trail = "";
                if (pos + < remainText.length()) trail = remainText.substring(pos + 3);
                remainText = remainText.substring(0, pos+ remaining + trail;
            }
            // Set the label
            remainLabel.setText(remainText);
        }
        else {
            // If progress is 0, reset the start time
            startTime = System.currentTimeMillis();
        }
  }

  /**
   * Get the current progress as a percentage
   
   @return Current percentage for the progress bar
   */
  public int getProgress ()
    {
        return (progress);
    }

  /**
   * Get the text displayed above the progress bar
   
   @return the text
   */
  public String getText ()
    {
        return this.textLabel.getText();
    }

  /**
   * Set the text displayed above the progress bar
   
   @param text the text to set
   */
  public void setText (String text)
    {
        this.textLabel.setText(text);
    }

  /**
   * Get the message used to format the time remaining text
   * for hours
   
   @return the hours message
   */
  public String getHoursMessage ()
    {
        return hoursMessage;
    }

  /**
   * Set the message used to format the time remaining text
   * below the progress bar. There are 3 messages used for
   * hours, minutes and seconds respectively.
   
   * The message must contain a placeholder for the value. The
   * placeholder must be {0}. For example, the following is
   * a valid message:
   
   *     "Hours remaining: {0}"
   
   @param hoursMessage the hours message to set
   */
  public void setHoursMessage (String hoursMessage)
    {
        this.hoursMessage = hoursMessage;
    }

  /**
   * Get the message used to format the time remaining text
   * for minutes
   
   @return the minutesMessage
   */
  public String getMinutesMessage ()
    {
        return minutesMessage;
    }

  /**
   * Set the message used to format the time remaining text
   * below the progress bar. There are 3 messages used for
   * hours, minutes and seconds respectively.
   
   * The message must contain a placeholder for the value. The
   * placeholder must be {0}. For example, the following is
   * a valid message:
   
   *     "Minutes remaining: {0}"
   
   @param minutesMessage the minutes message to set
   */
  public void setMinutesMessage (String minutesMessage)
    {
        this.minutesMessage = minutesMessage;
    }

  /**
   * Get the message used to format the time remaining text
   * for seconds
   
   @return the secondsMessage
   */
  public String getSecondsMessage ()
    {
        return secondsMessage;
    }

  /**
   * Set the message used to format the time remaining text
   * below the progress bar. There are 3 messages used for
   * hours, minutes and seconds respectively.
   
   * The message must contain a placeholder for the value. The
   * placeholder must be {0}. For example, the following is
   * a valid message:
   
   *     "Seconds remaining: {0}"
   
   @param secondsMessage the secondsMessage to set
   */
  public void setSecondsMessage (String secondsMessage)
    {
        this.secondsMessage = secondsMessage;
    }

  
}


           
         
  
GWT-progressBar.zip( 5 k)
Related examples in the same category
1.ProgressBar Sample (Smart GWT)ProgressBar Sample (Smart GWT)
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.