为了账号安全,请及时绑定邮箱和手机立即绑定

进度条Java

进度条Java

慕娘9325324 2019-10-21 14:31:03
我正在使用JProgressBar显示进度。但是,如何显示ProgressBar从0加载到100?我从互联网上获取了代码,并且其工作正常,但progressBar未加载。码progressFrame = new JFrame(); // frame to display progress barprogressBar = 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();如果有人可以编辑上面的代码,我将不胜感激。谢谢。
查看完整描述

3 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

您必须为此使用线程。设计一个实现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]);


查看完整回答
反对 回复 2019-10-21
?
白板的微信

TA贡献1883条经验 获得超3个赞

一定要从网上获得爱情代码...哦...


您拥有的代码违反了Swing的单一线程规则,因此是一个不好的例子。


您可以使用多种选择SwingWorker。您可以publish使用进度并使用该process方法来更新进度条,也可以使用PropertyChangeListener和监视通过调用的setProgress方法创建的进度更改事件。SwingWorker


import java.awt.BorderLayout;

import java.awt.EventQueue;

import java.awt.GridBagConstraints;

import java.awt.GridBagLayout;

import java.awt.Insets;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.beans.PropertyChangeEvent;

import java.beans.PropertyChangeListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JProgressBar;

import javax.swing.SwingWorker;

import javax.swing.UIManager;

import javax.swing.UnsupportedLookAndFeelException;

import javax.swing.border.EmptyBorder;


public class SwingWorkerProgress {


    public static void main(String[] args) {

        new SwingWorkerProgress();

    }


    public SwingWorkerProgress() {

        EventQueue.invokeLater(new Runnable() {

            @Override

            public void run() {

                try {

                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {

                }


                JFrame frame = new JFrame("Testing");

                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.setLayout(new BorderLayout());

                frame.add(new TestPane());

                frame.pack();

                frame.setLocationRelativeTo(null);

                frame.setVisible(true);

            }

        });

    }


    public class TestPane extends JPanel {


        private JProgressBar pbProgress;

        private JButton start;


        public TestPane() {


            setBorder(new EmptyBorder(10, 10, 10, 10));

            pbProgress = new JProgressBar();

            setLayout(new GridBagLayout());

            GridBagConstraints gbc = new GridBagConstraints();

            gbc.insets = new Insets(4, 4, 4, 4);

            gbc.gridx = 0;

            gbc.gridy = 0;

            add(pbProgress, gbc);


            start = new JButton("Start");

            gbc.gridy++;

            add(start, gbc);


            start.addActionListener(new ActionListener() {

                @Override

                public void actionPerformed(ActionEvent e) {

                    start.setEnabled(false);

                    ProgressWorker pw = new ProgressWorker();

                    pw.addPropertyChangeListener(new PropertyChangeListener() {


                        @Override

                        public void propertyChange(PropertyChangeEvent evt) {

                            String name = evt.getPropertyName();

                            if (name.equals("progress")) {

                                int progress = (int) evt.getNewValue();

                                pbProgress.setValue(progress);

                                repaint();

                            } else if (name.equals("state")) {

                                SwingWorker.StateValue state = (SwingWorker.StateValue) evt.getNewValue();

                                switch (state) {

                                    case DONE:

                                        start.setEnabled(true);

                                        break;

                                }

                            }

                        }


                    });

                    pw.execute();

                }

            });


        }

    }


    public class ProgressWorker extends SwingWorker<Object, Object> {


        @Override

        protected Object doInBackground() throws Exception {

            int i = 0;

            int max = 2000;


            while (i < max) {

                i += 10;

                int progress = Math.round(((float)i / (float)max) * 100f);

                setProgress(progress);

                try {

                    Thread.sleep(25);

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }


            return null;

        }

    }

}


查看完整回答
反对 回复 2019-10-21
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

import java.awt.GridBagLayout;

import javax.swing.JFrame;

import javax.swing.JProgressBar;


public class ProgressBar {

    /**

     * JProgressBar

     * 

     * @throws InterruptedException

     */

    public static void main(String[] args) throws InterruptedException {

        JFrame frame = new JFrame("New Window");

        frame.setSize(600, 400);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setLocationRelativeTo(null);

        frame.setLayout(new GridBagLayout());

        frame.setVisible(true);


        //JLabel textLoad = new JLabel();

        //textLoad.setText("Loading ....");


        JProgressBar progressBar = new JProgressBar();        

        progressBar.setMinimum(0);

        progressBar.setMaximum(100);

        progressBar.setStringPainted(true);

        progressBar.setIndeterminate(true);

        frame.add(progressBar);                               


        for (int i = progressBar.getMinimum(); i <= progressBar.getMaximum(); i++) {

            Thread.sleep(500);

            progressBar.setValue(i);

        }


        textLoad.setText("Done !");

    }


}


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 378 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信