watermelon_csdn
2021-01-31 22:50
采纳率: 100%
浏览 67
已采纳

Java JProgressBar进度条显示空白?请大佬指教是为什么?

 JProgressBar进度条通过手动点击按钮显示空白,但是通过程序点击却正常。请大佬指教问题是出在哪?

图片如下,后附源码。

 

package tmp;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class ProgressTest extends JFrame {

	public static void main(String[] args) throws Exception {
		ProgressTest rf = new ProgressTest();
		rf.setVisible(true);
		// rf.button.doClick();
	}

	private JButton button;
	private JTextField textField;
	private JDialog dialog;
	private JProgressBar progressBar;

	public ProgressTest() {
		button = new JButton("开始");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				textField.setText("");
				dialog.setVisible(true);
				for (int i = 0; i < 100; i++) {
					progressBar.setValue(i);
					try {
						Thread.sleep(111);
					} catch (InterruptedException e1) {
					}
				}
				dialog.setVisible(false);
				textField.setText("222222222222222222");
			}
		});
		textField = new JTextField("111111111111111111");

		getContentPane().add(BorderLayout.WEST, button);
		getContentPane().add(BorderLayout.CENTER, textField);

		progressBar = new JProgressBar();
		progressBar.setStringPainted(true);
		progressBar.setIndeterminate(false);

		dialog = new JDialog(this, "进度条");
		dialog.add(progressBar);
		dialog.setSize(300, 75);
		dialog.setLocationRelativeTo(this);
		dialog.setDefaultCloseOperation(HIDE_ON_CLOSE);

		setSize(600, 120);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

}
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • allway2 2021-02-01 21:14
    已采纳

    import java.awt.BorderLayout;
    import java.awt.Dimension;
    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.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JProgressBar;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;

    @SuppressWarnings("serial")
    public class ProgressTestEdit extends JFrame implements ActionListener, PropertyChangeListener {

        public static void main(String[] args) throws Exception {
            ProgressTestEdit rf = new ProgressTestEdit();
            rf.setVisible(true);
            // rf.button.doClick();
        }

        private JButton button;
        private JTextField textField;
        private JDialog dialog;
        private JProgressBar progressBar;
        private Task task;

        public ProgressTestEdit() {
            button = new JButton("开始");
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    textField.setText("");
                    dialog.setVisible(true);

                    task = new Task();
                    task.start();

                }
            });
            textField = new JTextField("111111111111111111");

            getContentPane().add(BorderLayout.WEST, button);
            getContentPane().add(BorderLayout.CENTER, textField);

            progressBar = new JProgressBar(0, 100);
            progressBar.setValue(0);
            progressBar.setStringPainted(true);

            dialog = new JDialog(this, "进度条");
            dialog.add(progressBar);
            dialog.setSize(300, 75);
            dialog.setLocationRelativeTo(this);
            dialog.setDefaultCloseOperation(HIDE_ON_CLOSE);

            setSize(600, 120);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
        }

        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            // TODO Auto-generated method stub
            for (int i = 0; i < 100; i++) {
                progressBar.setValue(i);
                try {
                    Thread.sleep(111);
                } catch (InterruptedException e1) {
                }
            }

        }

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub

        }

        private class Task extends Thread {
            public Task() {
            }

            public void run() {
                for (int i = 0; i <= 100; i += 10) {
                    final int progress = i;

                    SwingUtilities.invokeLater(new Runnable() {
                        public void run() {
                            progressBar.setValue(progress);
                        }
                    });
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                    }
                }
            }
        }
    }

    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题