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);
}
}
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) {
}
}
}
}
}