在很多应用中,如果某一处理需要花费的时间比较长,应用应该提供一个比较人性化的提示。如果这个处理是由一个循环来实现的,则可以采用一个任务进度提示,其它情况可能就采用弹出一个类似于"系统正在处理,请稍后..."提示框的方式来达到目的。以下的代码简单实现了这一功能:
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;
}
| |
/**
* 关闭显示的等待窗口
*/
public void close(){
if(null!=wininc && wininc.isshowing())
wininc.dispose();
}
/**
* 关闭显示的等待窗口
*/
public void dispose(){
close();
}
/**
* 设置提示文本
* @param atip:提示文本
*/
public void settip(string atip){
if(this.curtype==progress){
propanel.jtip.settext(atip);
}else{
jwaittip.settext(atip);
}
resetflg = true;
wininc.validate();
}
/**
* 设置进度条的最大值
* @param avalue 最大值
*/
public void setmaxvalue(int avalue){
if (curtype == progress) {
if(avalue>0)
maxprogress = avalue;
else
maxprogress = 100;
propanel.jprogress.setmaximum(maxprogress);
}
else {
throw new runtimeexception("等待窗口不支持此函数,只有进度条窗口才支持!");
}
}
/**
* 设置当前进度
* @param avalue 当前进度值
*/
public void setprogress(int avalue){
propanel.jprogress.setvalue(avalue);
wininc.validate();
}
/**
* 显示窗口
* @param atiptext 文本提示
* @param alocx 窗口位置x
* @param alocy 窗口位置y
*/
public void show(string atiptext,int alocx,int alocy){
settip(atiptext);
wininc.setlocation(alocx,alocy);
wininc.show();
}
/**
* 显示窗口
* @param atiptext 文本提示
*/
public void show(string atiptext){
show(atiptext,this.default_locatex,this.default_locatey);
}
/**
* 显示窗口
* @param alocx 窗口位置x
* @param alocy 窗口位置y
*/
public void show(int alocx,int alocy){
if(curtype==progress)
show(this.progress_tip,alocx,alocy);
else
show(this.waiting_tip,alocx,alocy);
}
/**
* 显示窗口
*/
public void show(){
if(resetflg){
if(curtype==progress)
show(propanel.jtip.gettext(),this.default_locatex,this.default_locatey);
else
show(jwaittip.gettext(),this.default_locatex,this.default_locatey);
}else{
if(curtype==progress)
show(this.progress_tip,this.default_locatex,this.default_locatey);
else
show(this.waiting_tip,this.default_locatex,this.default_locatey);
}
}
public static void main(string[] args) {
//进度条测试
waitingframe frm = waitingframe.getinstance(waitingframe.progress);
frm.setmaxvalue(100);
frm.show();
int i = 0;
while (i++ < 100) {
frm.setprogress(i);
try {
thread.sleep(100);
}
catch (interruptedexception ex) {
}
}
frm.dispose();
//等待窗体测试
frm = waitingframe.getinstance(waitingframe.waiting);
frm.show();
try {
thread.sleep(10000);
}
catch (interruptedexception ex1) {
}
frm.dispose();
}
}
闽公网安备 35060202000074号