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