Chinaunix首页 | 论坛 | 博客
  • 博客访问: 445772
  • 博文数量: 750
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 4970
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-09 12:36
文章分类

全部博文(750)

文章存档

2011年(1)

2008年(749)

我的朋友
最近访客

分类:

2008-09-09 15:21:01

   在很多应用中,如果某一处理需要花费的时间比较长,应用应该提供一个比较人性化的提示。如果这个处理是由一个循环来实现的,则可以采用一个任务进度提示,其它情况可能就采用弹出一个类似于"系统正在处理,请稍后..."提示框的方式来达到目的。以下的代码简单实现了这一功能:

package test;
import javax.swing.*;
import java.awt.*;
import com.borland.jbcl.layout.*;
import javax.swing.border.*;

class ProgressPanel extends JPanel {
  JLabel jTip = new JLabel();
  JProgressBar jProgress = new JProgressBar();
  XYLayout xYLayout1 = new XYLayout();
  TitledBorder titledBorder1;
  public ProgressPanel() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  public static void main(String[] args) {
    ProgressPanel progressPanel1 = new ProgressPanel();
  }
  private void jbInit() throws Exception {
    titledBorder1 = new TitledBorder("");
    jTip.setText("处理中...");
    jTip.setFont(new java.awt.Font("Dialog", 0, 12));
    this.setLayout(xYLayout1);
    jProgress.setOrientation(JProgressBar.HORIZONTAL);
    jProgress.setForeground(new Color(0, 0, 105));
    jProgress.setBorder(BorderFactory.createLoweredBevelBorder());
    jProgress.setStringPainted(true);
    xYLayout1.setWidth(258);
    xYLayout1.setHeight(75);
    this.setDebugGraphicsOptions(0);
    this.add(jTip, new XYConstraints(10, 1, -1, -1));
    this.add(jProgress,       new XYConstraints(5, 16, 249, 24));
  }
}



package test;
import java.awt.Window;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Rectangle;
import javax.swing.SwingConstants;
import java.awt.GridBagLayout;

public class WaitingFrame {
    protected static Window winInc;
    private static WaitingFrame inc;

    private static JLabel jWaitTip;
    private static ProgressPanel proPanel;

    private static final String WAITING_TIP = "系统正在处理中,请稍后.....";
    private static final String PROGRESS_TIP = "处理中...";

    private static final int DEFAULT_WIDTH = 260;
    private static final int DEFAULT_HEIGHT = 45;

    private static int DEFAULT_LOCATEX;
    private static int DEFAULT_LOCATEY;

    private static boolean resetFlg = false;

    private static int maxProgress = 100;
    //当前显示的窗口类型
    private int curType;

    /**
     * 等待窗口
     */
    public static final int WAITING = 0;

    /**
     * 进度条窗口
     */
    public static final int PROGRESS = 1;

    private WaitingFrame() {
    }

    /**
     * 获取提示窗口实例
     * @param aType:窗口类型
     * @return
     */
    public synchronized static WaitingFrame getInstance(int aType){
        if(aType==PROGRESS){
            if(null==proPanel){
                proPanel = new ProgressPanel();
            }
        }else{
            if(null==jWaitTip){
                jWaitTip = new JLabel();
                jWaitTip.setFont(new java.awt.Font("Dialog", 0, 16));
                jWaitTip.setHorizontalAlignment(SwingConstants.CENTER);
                jWaitTip.setText(WAITING_TIP);
                jWaitTip.setBounds(new Rectangle(0, 0, 280, 98));
            }
        }
        if(null==inc){
            inc = new WaitingFrame();
            JFrame frm = new JFrame();
            frm.getContentPane().setLayout(new GridBagLayout());
            winInc = new Window(frm);
            if(aType==PROGRESS){
                inc.curType = aType;
                proPanel.jProgress.setMaximum(maxProgress);
                proPanel.jProgress.setValue(0);
                winInc.add(proPanel);
            }else{
                inc.curType = WAITING;
                winInc.add(jWaitTip);
            }
            winInc.setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
            Dimension sysSize = Toolkit.getDefaultToolkit().getScreenSize();
            DEFAULT_LOCATEX = (sysSize.width-DEFAULT_WIDTH)/2;
            DEFAULT_LOCATEY = (sysSize.height-DEFAULT_HEIGHT)/2;;
        }else{
            if (aType == PROGRESS) {
                winInc.removeAll();
                proPanel.jTip.setText(PROGRESS_TIP);
                proPanel.jProgress.setValue(0);
                winInc.add(proPanel);
            }
            else {
                winInc.removeAll();
                jWaitTip.setText(WAITING_TIP);
                winInc.add(jWaitTip);
            }
        }
        inc.curType = aType;
        inc.resetFlg = false;
        return inc;
    }

[1]  

【责编:Peng】

--------------------next---------------------

阅读(134) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~