• ZK 长时操作带进度条


    LongProcess.zul:

    <?xml version="1.0" encoding="UTF-8"?>
    <window id="" border="normal">
        <button label="从1数到10000">
            <attribute name="onClick">
                String url = "/Progressmeter.zul";
                Window window = (Window)Executions.createComponents(url, null, null);
                window.doModal();
            </attribute>
        </button>
    </window>

    Progressmeter.zul:

    <?page title="new page title" contentType="text/html;charset=UTF-8"?>
    <zk>
    <window id="progresswindow" title="进度条显示" border="normal" width="500px" 
        apply="test.ImportUserProgressViewCtrl">
    <vbox>
        <label id="progresslabel" value="正在处理中,请耐心等待……"/>
        <separator spacing="5px" />
        <progressmeter id="userprogress" width="400px" value="0"/>
    </vbox>
    </window>
    </zk>

    ImportUserProgressViewCtrl.java:

    package test;
    
    import org.zkoss.zk.ui.Component;
    import org.zkoss.zk.ui.Desktop;
    import org.zkoss.zk.ui.Executions;
    import org.zkoss.zk.ui.util.GenericAutowireComposer;
    import org.zkoss.zul.Label;
    import org.zkoss.zul.Progressmeter;
    import org.zkoss.zul.Window;
    
    public class ImportUserProgressViewCtrl extends GenericAutowireComposer<Component>{
    
        private static final long serialVersionUID = 1L;
    
        private Window progresswindow;
        private Progressmeter userprogress;
        private Label progresslabel;
        
        @Override
        public void doAfterCompose(Component comp) throws Exception {
            // TODO Auto-generated method stub
            super.doAfterCompose(comp);
            
            // 启动进度条
            desktop.enableServerPush(true);
            Thread t1 = new Thread(new UserHandleThread(userprogress, progresswindow, progresslabel));
            t1.start();
        }
        
        class UserHandleThread implements Runnable {
            
            private Desktop dt;
            private Progressmeter pg;
            private Window win;
            private Label prglb;
    
            public UserHandleThread(Progressmeter watchpg, Window window, Label lb) {
                pg = watchpg;
                dt = watchpg.getDesktop();
                win = window;
                prglb = lb;
            }
    
            @Override
            public void run() {
                
                    int rows = 10000;
                    //作为进度条区域值标准
                    int[] rowslarge = new int[10];
                    rowslarge[0] = (int) (rows * 0.1) >= 0 ? (int) (rows * 0.1) : 0;
                    rowslarge[1] = (int) (rows * 0.2) >= 0 ? (int) (rows * 0.2) : 0;
                    rowslarge[2] = (int) (rows * 0.3) >= 0 ? (int) (rows * 0.3) : 0;
                    rowslarge[3] = (int) (rows * 0.4) >= 0 ? (int) (rows * 0.4) : 0;
                    rowslarge[4] = (int) (rows * 0.5) >= 0 ? (int) (rows * 0.5) : 0;
                    rowslarge[5] = (int) (rows * 0.6) >= 0 ? (int) (rows * 0.6) : 0;
                    rowslarge[6] = (int) (rows * 0.7) >= 0 ? (int) (rows * 0.7) : 0;
                    rowslarge[7] = (int) (rows * 0.8) >= 0 ? (int) (rows * 0.8) : 0;
                    rowslarge[8] = (int) (rows * 0.9) >= 0 ? (int) (rows * 0.9) : 0;
                    rowslarge[9] = (int) (rows * 1)   >= 0 ? (int) (rows * 1)   : 0;
                    
                    try {
                        //从1数到10000
                        for (int i = 0; i <= rows; i++) {
    
                            if (i == rowslarge[0]) {
                                Executions.activate(dt);
                                pg.setValue(10);
                                prglb.setValue("已完成10%……");
                                Executions.deactivate(dt);
                                Thread.sleep(2000);
                            } else if (i == rowslarge[1]) {
                                Executions.activate(dt);
                                pg.setValue(20);
                                prglb.setValue("已完成20%……");
                                Executions.deactivate(dt);
                                Thread.sleep(2000);
                            } else if (i == rowslarge[2]) {
                                Executions.activate(dt);
                                pg.setValue(30);
                                prglb.setValue("已完成30%……");
                                Executions.deactivate(dt);
                                Thread.sleep(2000);
                            } else if (i == rowslarge[3]) {
                                Executions.activate(dt);
                                pg.setValue(40);
                                prglb.setValue("已完成40%……");
                                Executions.deactivate(dt);
                                Thread.sleep(2000);
                            } else if (i == rowslarge[4]) {
                                Executions.activate(dt);
                                pg.setValue(50);
                                prglb.setValue("已完成50%……");
                                Executions.deactivate(dt);
                                Thread.sleep(2000);
                            } else if (i == rowslarge[5]) {
                                Executions.activate(dt);
                                pg.setValue(60);
                                prglb.setValue("已完成60%……");
                                Executions.deactivate(dt);
                                Thread.sleep(2000);
                            } else if (i == rowslarge[6]) {
                                Executions.activate(dt);
                                pg.setValue(70);
                                prglb.setValue("已完成70%……");
                                Executions.deactivate(dt);
                                Thread.sleep(2000);
                            } else if (i == rowslarge[7]) {
                                Executions.activate(dt);
                                pg.setValue(80);
                                prglb.setValue("已完成80%……");
                                Executions.deactivate(dt);
                                Thread.sleep(2000);
                            }else if (i == rowslarge[8]) {
                                Executions.activate(dt);
                                pg.setValue(90);
                                prglb.setValue("已完成90%……");
                                Executions.deactivate(dt);
                                Thread.sleep(2000);
                            }else if (i == rowslarge[9]) {
                                Executions.activate(dt);
                                pg.setValue(100);
                                prglb.setValue("100%,导入成功,正自动关闭窗口,请稍等..");
                                Executions.deactivate(dt);
                                Thread.sleep(2000);
                            }
                        }
                        Executions.activate(dt);
                        win.detach();
                        Executions.deactivate(dt);
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
            }
        }
        
    }

    最终效果如下:

  • 相关阅读:
    当期所得税费用总额
    所得税净利润算法
    [AGC028B]Removing Blocks 概率与期望
    bzoj 4319: cerc2008 Suffix reconstruction 贪心
    bzoj 2430: [Poi2003]Chocolate 贪心
    BZOJ 2839: 集合计数 广义容斥
    luogu 5505 [JSOI2011]分特产 广义容斥
    CF504E Misha and LCP on Tree 后缀自动机+树链剖分+倍增
    CF798D Mike and distribution 贪心
    CF707D Persistent Bookcase 可持久化线段树
  • 原文地址:https://www.cnblogs.com/langdangyunliu/p/4609494.html
Copyright © 2020-2023  润新知