معرفی
کلاس ProgressMonitor برای نظارت بر پیشرفت برخی عملیات استفاده می شود. هنگامی که عملیات آغاز شده توسط کاربر زمان قابل توجهی را می گیرد، بازخورد بصری باید به کاربر ارائه شود. یک وسیله رایج برای این بازخورد بصری نمایش مکان نما انتظار است. هنگامی که ProgressMonitor ایجاد می شود، در یک محدوده عددی با یک رشته توصیفی ارائه می شود.
کلاس ProgressMonitor چگونه کار می کند؟
با پیشرفت عملیات، متد setProgress() را فراخوانی می کند تا نشان دهد که عملیات در محدوده [min, max] چقدر است.
کلاس ProgressMonitor زمانی که پیشرفت روی حداکثر مقدار محدوده عملیات تنظیم شود، کادر محاوره ای را می بندد. این عملیات همچنین می تواند از روش بستن برای برقراری ارتباط با ProgressMonitor استفاده کند که عملیات کامل شده است و کادر محاوره ای باید بسته و دور ریخته شود. یک شی ProgressMonitor را می توان با فراخوانی سازنده به عنوان نمونه سازی کرد
یک شی گرافیکی بسازید که پیشرفت را نشان می دهد، معمولاً با پر کردن یک نوار مستطیل شکل با نزدیک شدن به اتمام فرآیند.
ProgressMonitor با محدوده عملیاتی 0-100 ایجاد می شود. یک پیام چند خطی مشخص شده است. یک یادداشت در سازنده داده می شود زیرا عملیات نمونه یادداشت را با پیشرفت به روز می کند. ProgressMonitor بلافاصله کادر محاوره ای را نشان نمی دهد. منتظر می ماند تا پیشرفت توسط عملیات تنظیم شود و سپس مدت زمان عملیات را تخمین می زند. اگر این زمان بیشتر از عملیات در آستانه باشد، کادر محاوره ای نمایش داده می شود.
برای ایجاد یک دکمه در یک مانیتور برنامه که بین همه عملیات مشترک است، مشکلی را در نظر بگیرید. بنابراین، در صورت کلیک روی دکمه شروع هنگام نمایش متر برنامه، چندین رشته، مانیتور برنامه را به روز می کنند.
کد منبع
import java.awt.event.*;
import javax.swing.*;
public class ProgressTest extends Object {
public static void main(String args[]) {
JFrame frame = new JFrame("Progress Bar/Monitor Example");
JButton button = new JButton("Start");
frame.getContentPane().add(button, BorderLayout.CENTER);
int min = 0;
int max = 100;
String[] message = new String[2];
message[0] = "Performing Operation";
message[1] = "This may take some times........";
final ProgressMonitor monitor = new ProgressMonitor(frame, message, "Iteration", min, max);
final Runnable runnable = new Runnable() {
public void run() {
int sleepTime = 500;
for (int i = 1; i < 100; i++) {
try {
monitor.setNote("Iteration" + i);
monitor.setProgress(i);
if (monitor.isCanceled()) {
monitor.setProgress(100);
break;
} //if close
Thread.sleep(sleepTime);
} catch (InterruptedException dontcare) {}
} //close for loop
monitor.close();
} //close run()
};
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
Thread thread = new Thread(runnable);
thread.start();
}
});
frame.pack();
frame.setVisible(true);
}
}
خروجی
پیاده سازی کد
روش setProgress برای به روز رسانی پیشرفت عملیات استفاده می شود. پیشرفت یک عدد صحیح در محدوده عملیاتی فعلی است. محدوده عملیات در سازنده ProgressMonitor مشخص شده است و می توان آن را با متدهای setMinimum و setMaximum تغییر داد. نسخه های دریافت هر یک از این روش ها را می توان برای تعیین محدوده عملیاتی فعلی استفاده کرد. در روش setProgress، ProgressMonitor تعیین می کند که آیا کادر محاوره ای مورد نیاز است یا خیر. اگر عملیات بتواند تماس های ثابتی را برای متد setProgress ارائه دهد، این کلاس بهترین کار را خواهد داشت.
همانطور که عملیات پیشرفت را به روز می کند، می تواند یادداشت String ارائه شده به کاربر را با استفاده از روش setNote نیز به روز کند. به عنوان مثال، اگر عملیات در حال پردازش لیستی از جزئیات مشتری باشد، نام مشتری تحت عمل می تواند در یادداشت ارائه شود. زمانی که عملیات میخواهد یادداشت را در طول عملیات بهروزرسانی کند، باید قبل از ایجاد کادر محاورهای، یک یادداشت غیر تهی مشخص شود. اگر هنگام ایجاد کادر محاوره ای یادداشت خالی باشد، یادداشتی در کادر محاوره ای گنجانده نمی شود و تماس های بعدی به setNote نادیده گرفته می شود.
خلاصه
کلاس ProgressMonitor زمانی که پیشرفت روی حداکثر مقدار محدوده عملیات تنظیم شود، کادر محاوره ای را می بندد. ProgressMonitor بلافاصله کادر محاوره ای را نشان نمی دهد. منتظر می ماند تا پیشرفت توسط عملیات تنظیم شود و سپس مدت زمان عملیات را تخمین می زند.