GWT进度栏 : 进度条 « GWT « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » GWT » 进度条屏幕截图 
GWT进度栏


/*
 * 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
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.