做了一个Swing程序,后台运算量很大,就是说在界面出现之前需要等待一段时间,想做一个类似与“程序初始化”的进度条,进度条加载完成后Swing界面就出来了
请教一下该怎么做,最好能给点代码或者给点思路

解决方案 »

  1.   

    很少做swing.! 帮你顶一个把
      

  2.   

    JProgressBar
    相关的可以看API
      

  3.   


    最简单的,加载的时候,显示一张转转转的gif,哈哈,比进度条好看
      

  4.   

    用JS+CSS+DIV 做一个假的进度条。其实就是为了让用户知道已经提交请求了,但你得等会儿...
    缺点是加载结束时间不太好掌握(可以自己设置),尽量跟你要跳转的那页出来时间保持一致吧。
    你看能用不? <!--
    var ie5 = (document.all && document.getElementsByTagName);
    var step = 0;
    function setSB(v, el, inforEl, message) {
    if (ie5 || document.readyState == "complete") {
    filterEl = el.children[0];
    valueEl = el.children[1]; if (filterEl.style.pixelWidth > 0) {
    var filterBackup = filterEl.style.filter;
    filterEl.style.filter = "";
    filterEl.style.filter = filterBackup;
    }filterEl.style.width = v + "%";
    valueEl.innerText = v + "%";
    inforEl.innerText = message;
    }
    }
    function setSBByStep(v, el, inforEl, message) {
    if (ie5 || document.readyState == "complete") {
    step = step + v;
    filterEl = el.children[0];
    valueEl = el.children[1];if (filterEl.style.pixelWidth > 0) {
    var filterBackup = filterEl.style.filter;
    filterEl.style.filter = "";
    filterEl.style.filter = filterBackup;
    }
    filterEl.style.width = step + "%";
    valueEl.innerText = step + "%"
    inforEl.innerText = message;
    }
    }
    function fakeProgress(v, el) {
    if (v >= 101)
    location.href="http://www.×××.com";
    else {
    setSB(v, el, infor, "正在加载... 请稍候");
    window.setTimeout("fakeProgress(" + (v + 1) + ", document.all['" + el.id + "'])", 60);
    }
    }
    //--><BODY onload="fakeProgress(0,sb)" topmargin=100 bgcolor="#999999">
    <br><br><br><br><br><br><br><br>
    <!-- Status Bar Starts -->
    <div align=center>
    <DIV id=sb 
    style="BORDER-RIGHT: white 0px inset; BORDER-TOP: white 0px inset; BACKGROUND: #cccccc; BORDER-LEFT: white 0px inset; WIDTH: 200px; BORDER-BOTTOM: white 0px inset; HEIGHT: 20px; TEXT-ALIGN: left">
    <DIV id=sbChild1 
    style="FILTER: Alpha(Opacity=0, FinishOpacity=80, Style=1, StartX=0, StartY=0, FinishX=100, FinishY=0); WIDTH: 0%; POSITION: absolute; HEIGHT: 20px">
    <DIV 
    style="FONT-SIZE: 1px;BACKGROUND:#ffffff; WIDTH: 100%; HEIGHT: 100%"></DIV></DIV>
    <DIV 
    style="FONT-SIZE:11px; WIDTH: 100%; COLOR:#000000; FONT-FAMILY:verdana; POSITION: absolute; TEXT-ALIGN: center"></DIV></DIV>
    <!-- Status Bar Ends -->
    <br>
    <DIV id=infor
    style=" FONT-SIZE:11px; WIDTH: 100%; COLOR:#000000; FONT-FAMILY:verdana; POSITION: relative; TEXT-ALIGN: center">
    </DIV>
    </div>
    </BODY>
      

  5.   

    给个大概的思路,具体的我没实现。JProgressBar jpb=new JProgressBar();jpb.setValue(0);
    jpb.setMaximum(100);比如你正在复制一个文件,则设一个值用来表示复制的量,假设为 currentValue,这个量的值为已复制的值除以总的文件的值,即文件的大小。然后设置进度条的值  jpb.setValue(currentValue) 这样就ok了。记得把jpb 添加到面板里去就可以了。希望对你有用
      

  6.   

    Java 6  提供 了SplashScreen。
    看这篇
    Java Splash Screen可以同程序交互
    http://blog.sina.com.cn
    /s/blog_4b6047bc010009f0.html
      

  7.   

    楼上的各位说的什么跟什么啊。楼主最需要的是用JProgressBar+SwingWorker!
    楼上的也是从WilliamChen的博客摘来的啊,这里有WilliamChen的更贴切的一个Demo:
    http://blog.sina.com.cn/s/blog_4b6047bc010007so.html
      

  8.   

    初始化程序的时候用张图片比较好点...
    要是进行操作的话还是JProgressBar
    网上有例子
      

  9.   

    可以看看官方的教程,我这有个思路:通过SwingWorker来控制,把你的后台计算代码放到doInBackground()方法中,把前台的显示放到done()方法中来,并把进度条设置成Indeterminate模式public class CreateGUI extends JPanel{
    private JProgressBar progressBar=null;
    private static JFrame frame = null;
    class Task extends SwingWorker<void, Void>{
    @Override
    protected void doInBackground() throws Exception {
    // TODO Auto-generated method stub
    /**
    后台计算
    */
     }
    protected void done() {
      //前台代码
     }
     public CreateGUI(){
     
     task = new Task();
         task.execute();
     progressBar = new JProgressBar();
         progressBar.setStringPainted(true);
     progressBar.setString("初始化中");
         progressBar.setIndeterminate(true);
         JPanel panel = new JPanel();
         panel.add(progressBar);
         add(panel, BorderLayout.PAGE_START);
         setBorder(BorderFactory.createEmptyBorder(20, 50, 20, 50));
     }
        private static void createAndShowGUI() {
            //Create and set up the window.
     frame=new JFrame();
     frame.setUndecorated(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         //Create and set up the content pane.
            JComponent newContentPane = new CreateGUI();
            newContentPane.setOpaque(true); //content panes must be opaque
            frame.setContentPane(newContentPane);         //Display the window.
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);

        }
        public static void main(String[] args) {
            //Schedule a job for the event-dispatching thread:
            //creating and showing this application's GUI.
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }


      

  10.   

    就一个JProgressBar,使用线程来控制