ياإخوان كيف استخدم ProgressBar يبدأ مع بداية حلقة for وينتهي مع نهايتها ,
مع العلم أن الحلقة أكثر من 100 والـ ProgressBar فقط 100 , وهذه الحلقة :
for(int i=0; i<2000;i++){
System.out.println(i);
}ياإخوان كيف استخدم ProgressBar يبدأ مع بداية حلقة for وينتهي مع نهايتها ,
مع العلم أن الحلقة أكثر من 100 والـ ProgressBar فقط 100 , وهذه الحلقة :
for(int i=0; i<2000;i++){
System.out.println(i);
}تم تعديل هذه المشاركة بواسطة هدف الشمالي في 9 نوفمبر 2010 في 13:59
اعمل متغير خارج الحلقة وقم بزيادته وقتما تستخدم الprogressbar
for(int i=0, counter=0; i<2000;i++){
System.out.println(i);
// increase counter when you use the progressbar
movebar(++counter);
}معذرة الكود أعلاه غير صحيح ، يجب أن تكون الزيادة بناء على شرط مثلاً:
for(int i=0, counter=0; i<2000;i++){
System.out.println(i);
// increase counter when you use the progressbar
if ( i % 50 == 0 )
movebar(++counter);
}أو كما وضح الأخ أوراكل : يمكنك طرح القيمة من 10.
بالتوفيق :).
تم تعديل هذه المشاركة بواسطة Wajdy Essam في 9 نوفمبر 2010 في 19:59
http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة
https://moalfat.com للكتب الالكترونية والكورسات التعليمية
Everything we see now is just an engineering solution based on old science
اذا كانت قيمة التكرار كبيرة 2000 كما تقول يمكنك تغيير سرعة ال progrss bar
مثلا داخل ال for loop
for(int i = 0; i <= 2000; i++){
System.out.println(i);
myProgressBar.setValue(i / 10);
}
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
الله يعطيكم العافية ,
ولكنني عند التطبيق لاحظت أنه لايتم رسم التقدم في العداد إلا بعد إنتهاء حلقة for
ويتضح ذلك جلياً عند زيادة العداد إلى 200000 مثلاً , أرجو تصويبي إن كنت على خطأ
انت بتقول انه بيرسم فى نهايه اللووب
هو فى الحقيقه بيرسم فى ذات الوقت
ولكنك مستخدم الـ thread المسئول عن الرسم وعن تحديث الـ GUI فى عمليه الـ Loop
ولذلك لابد من فصل الـ thread المسئول عن عمليه الـ loop عن الـ thread الخاص بتحديث الـ GUI
طبعا الـ thread الخاص بتحديث الـ GUI هو الـthread الرئيسيى للبرنامج
لذلك عليك بعمل الـ for loop فى thread منفصل حتى تشاهد عمليه التحديث فى وقتها
جرب هذا
ActionListener handler = new ActionListener() {
int count = 0;
public void actionPerformed(ActionEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
if (count < 500) {
ProgressBar.setValue(count / 5);
count++;
}
}
});
}
};
Timer timer = new Timer(0, handler);
timer.setRepeats(true);
timer.setDelay(1000);
timer.start();بالتوفيق :)
كنت أقصد أن التقدم لايتم رسمه إلا بعد نهاية أخر جملة طباعة ,
وبالنسبة لحل الأخ محمود بالفعل الرسم يتم بشكل متزامن ,
شكراً للجميع ,