JProgressBar 的关键在于 setMaxium(int maxValue) 和 setValue(int progressValue);
当ProgressBar的当前值需要Controller来提供时,遵照MVC结构的编码原则,我们不能向Controller传ProgressBar,
所以不能在Controller中的逻辑过程中直接setValue,所以这时就需要Timer来为ProgressBar来setValue。
Timer就像一个定时作业代理,每隔固定delay就向Controller询问一次进度值progressValue并为ProgressBar
setValue(progressValue),这样就可以实现进度条正常运转。
注意:setValue后proressBar若无法正常刷新进度条,则尝试一下方法。
MigrationController mc = MigrationController.getInstance();
progressBar.setValue(mc.getProgressValue());
Dimension d = progressBar.getSize();
Rectangle rect = new Rectangle(0, 0, d.width, d.height);
progressBar.paintImmediately(rect);//立即刷新进度条
JProgressBar与Timer配套使用的主要代码:
1.初始化JProgressBar(视情况而定)
progressBar.setMinimum(0);
progressBar.setMaximum(100);
progressBar.setValue(0);
progressBar.setStringPainted(true);
progressBar.setBorderPainted(true);
progressBar.setBackground(Color.WHITE);
2.初始化Timer:
ActionListener taskPerformer = new ActionListener()
{
@Override
public void actionPerformed(ActionEvent evt)
{
timerActionPerformed(evt);
}
};
timer = new Timer(100, taskPerformer);
3.为JProgressBar设置最大值(在合理的逻辑位置设置)
progressBar.setMaximum(totalObject);
4.Timer的监听事件处理
private void timerActionPerformed(ActionEvent evt)
{
logger.info("CurrentProgressValue = " + progressBar.getValue());
Dimension d = progressBar.getSize();
Rectangle rect = new Rectangle(0, 0, d.width, d.height);
MigrationController mc = MigrationController.getInstance();
progressBar.setValue(mc.getProgressValue());
progressBar.paintImmediately(rect);
}