当前位置: 首页 > 面试题库 >

Java 进度条

秦承允
2023-03-14
问题内容

我正在使用JProgressBar显示进度。但是,如何显示ProgressBar从0加载到100?我从互联网上获取了代码,但没有加载ProgressBar,但它可以正常工作。

progressFrame = new JFrame(); // frame to display progress bar
progressBar = new JProgressBar(0,100);
progressBar.setValue(0);
progressBar.setStringPainted(true);
progressFrame.add(progressBar);

new SwingWorker<Void,Void>()
    {
        protected Void doInBackground() throws SQLException, ClassNotFoundException
        {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            progressBar.setValue(0);
            frame.setEnabled(false); // frame = main frame

            //tableclass creates a JTable with data from database
            tableclass = new TheDatabaseTable(deptName);//it takes time to create
            progressBar.setValue(50);
            frame.getContentPane().removeAll();
            frame.setContentPane(tableclass);

            frame.validate();
            frame.repaint();

            progressBar.setValue(100);
            //progressFrame.dispose();
            return null;
        }; 
        protected void done()
        {
            //progressFrame.setVisible(false);
            frame.setVisible(true);
            progressFrame.dispose();
            frame.setEnabled(true);
        }

    }.execute();

如果有人编辑上面的代码可以正常工作,我将不胜感激。谢谢。


问题答案:

你必须为此使用线程。设计一个实现Runnable接口的类,该接口将更新这样的值。

class ProgressBarUpdator implements java.lang.Runnable {

    /**
     * Progress bar that shows the current status
     */
    private javax.swing.JProgressBar jpb = null;
    /**
     * Progress bar value
     */
    private java.lang.Integer value = null;

    /**
     * Constructor
     * @param jpb The progress bar this has to update
     */
    public ProgressBarUpdator(javax.swing.JProgressBar jpb) {
        this.jpb = jpb;
        jpb.setMaximum(100);
    }

    /**
     * Sets the value to the progress bar
     * @param value Value to set
     */
    public void setValue(java.lang.Integer value) {
        this.value = value;
    }

    /**
     * Action of the thread will be executed here. The value of the progress bar will be set here.
     */
    public void run() {
        do {
            if (value != null) {
                jpb.setValue((int)java.lang.Math.round(java.lang.Math.floor(value.intValue() * 100 / maximum)));
            }
            try {
                java.lang.Thread.sleep(100L);
            } catch (java.lang.InterruptedException ex) {
                ex.printStackTrace();
            }
        } while (value == null || value.intValue() < jpb.getMaximum());
    }
}

并在你的框架类中progressBar与新类一起使用

ProgressBarUpdator ju = new ProgressBarUpdator(progressBar);
new java.lang.Thread(ju).start();

每当你想更改值时,只需使用以下语句

ju.setValue([Value to set]);


 类似资料:
  • 所以我在谷歌上搜索了这个,但我能在上面找到任何东西:我在代码中调用了这个方法 然后,我添加了一个JProgressBar,称为进度条,并在单击GUI上的按钮时调用此代码: Progresslabel只是一个显示进度的标签。现在,当我这样做时,进度条显示如下: http://i.imgur.com/gXp5ByH.png 与其他应用程序上的情况不同: http://i.imgur.com/M61Cd

  • 问题内容: 我想显示使用servlet上传的上传进度栏。我尝试了iFrame技术Ajax。页面未重新加载,文件也被更新。但是,进度条没有到来。是否有可用于JavaServlts的jQuery进度插件? 谢谢!! 问题答案: 我强烈建议使用jQuery Uploadify 插件进行Ajax文件上传。它还带有进度条。您可以在其演示页面上找到示例。 与JSP /Servlet集成并不难。您基本上可以使“

  • 问题内容: 我正在编写一个Java应用程序(将NetBeans用作IDE和jFrame表单),并且其中一部分下载了文件。如何使用下载的当前进度更新进度条,或者至少获取另一个线程中当前下载的字节总数? 以下是我的代码的一部分: 问题答案: 一个工作示例,使用您的代码并在进度栏中显示进度,如下所示: 这显示了如何做-在使用它之前,您应该考虑GUI-Threads等。

  • 我正在编写一个Java应用程序(使用NetBeans作为IDE和jFrame表单),其中一部分下载一个文件。我如何用下载的当前进度更新进度条,或者至少获得另一个线程中当前下载的字节总量? 下面是我的一部分代码:

  • 使用一些额外的类和一些巧妙的浏览器特有的 CSS,样式化 HTML5 的<progress> 元素。确保你阅读了浏览器支持。 <progress class="progress" value="0" max="100">0%</progress> <progress class="progress" value="25" max="100">25%</progress> <progress c

  • 进度条 <div class="ui-progress"> <span style="width:50%"></span> </div> 图片上进度条 <ul class="ui-grid-halve"> <li> <div class="ui-grid-halve-img"> <span style="background-ima