Java swing - الكلاس JProgressBar

Java swing الكلاس JProgressBar

الكلاس JProgressBar يستخدم لإضافة (Progess Bar) في واجهة المستخدم .


بنا الكلاس JProgressBar

public class JProgressBar
extends JComponent
implements SwingConstants, Accessible
	

كونستركتورات الكلاس JProgressBar

الجدول التالي يحتوي على أهم الكونستركتورات الموجودة في الكلاس JProgressBar .

الكونستركتور مع تعريفه
public JProgressBar() ينشئ كائن من الكلاس JProgressBar يمثل Progess Bar أفقي, حدوده ظاهرة و قميته مخفية.
public JProgressBar(int orientation) ينشئ كائن من الكلاس JProgressBar يمثل Progess Bar مع تحديد إتجاهه ( أفقي أو عامودي ), حدوده ظاهرة و قميته مخفية.
مكان الباراميتر orientation نضع إحدى الثوابت الموجودة في الكلاس SwingConstants المخصصة لتحديد طريقة ظهور الـ Progess Bar.

الثوابت التي يسمح باستخدامها هي:
  • SwingConstants.VERTICAL يجعل الـ Progess Bar يظهر عامودياً.

  • SwingConstants.HORIZONTAL يجعل الـ Progess Bar يظهر أفقياً.


إفتراضياً, الـ Progess Bar يستخدم الثابت JList.HORIZONTAL.

يرمي الإستثناء IllegalArgumentException في حال لم يتم تحديد الـ Orientation بواسطة الثوابت المخصصة لذلك.
public JProgressBar(int orientation, int min, int max) ينشئ كائن من الكلاس JProgressBar يمثل Progess Bar مع تحديد إتجاهه ( أفقي أو عامودي ), حدوده ظاهرة, قيمته مخفية بالإضافة إلى تحديد أصغر و أكبر قيمة فيه.

  • مكان الباراميتر orientation نضع إحدى الثوابت الموجودة في الكلاس SwingConstants المخصصة لتحديد طريقة ظهور الـ Progess Bar.

  • مكان الباراميتر min نضع أصغر قيمة في الـ Progess Bar.

  • مكان الباراميتر max نضع أكبر قيمة في الـ Progess Bar.


يرمي الإستثناء IllegalArgumentException في حال لم يتم تحديد الـ Orientation بواسطة الثوابت المخصصة لذلك.

دوال الكلاس JProgressBar

الجدول التالي يحتوي على أهم الدوال الموجودة في الكلاس JProgressBar .

الدالة مع تعريفها
public void setIndeterminate(boolean visibility) في حال كنت لا تعرف كيف ستجعل قيمة الـ Progess Bar تزيد بشكل تلقائي.
يمكنك الإستفادة من هذه الدالة حيث أنها تجعل الـ Progess Bar يستمر بالتحرك بشكل يجعل المستخدم يعلم أن البرنامج يقوم بمهمة ما.
إذاً هذه الدالة تستخدم لتغيير الطريقة التي يمتلئ بها الـ Progess Bar.
مكان الباراميتر visibility نضع true إذا أردنا جعل الـ Progess Bar يستمر بالتحرك.
و نضع false إذا أردنا إرجاعه كما كان.
public void setStringPainted(boolean visibility) تستخدم لإخفاء أو إظهار نص الـ Progess Bar.
مكان الباراميتر visibility نضع true إذا أردنا إظهار نص الـ Progess Bar.
و نضع false إذا أردنا إخفائه.

ملاحظة: إفتراضياً, نص الـ Progess Bar يكون مخفي.
public void setMinimum(int minValue) تستخدم لتحديد أصغر قيمة في الـ Progess Bar.
مكان الباراميتر minValue نضع أصغر قيمة في الـ Progess Bar.
public void setMaximum(int maxValue) تستخدم لتحديد أكبر قيمة في الـ Progess Bar.
مكان الباراميتر maxValue نضع أكبر قيمة في الـ Progess Bar.
public void setValue(int value) تستخدم لتحديد قيمة الـ Progess Bar.
مكان الباراميتر value نضع القيمة التي نريد إظهارها في الـ Progess Bar.

ملاحظة: منطقياً, يجب أن تكون القيمة التي ستضعها بين أصغر و أكبر قيمة يمكن وضعها في الـ Progess Bar.
public void setString(String text) تستخدم لإظهار نص في الـ Progess Bar.
مكان الباراميتر text نضع النص الذي نريد إظهاره في الـ Progess Bar.

ملاحظة: يجب إستدعاء الدالة setStringPainted() و إعطائها القيمة true حتى يظهر النص في الـ Progess Bar.
public void setOrientation(int orientation) تستخدم لتحديد إتجاه الـ Progess Bar.
مكان الباراميتر orientation نضع إحدى الثوابت الموجودة في الكلاس SwingConstants المخصصة لتحديد طريقة ظهور الـ Progess Bar.

الثوابت التي يسمح باستخدامها هي:
  • SwingConstants.VERTICAL يجعل الـ Progess Bar يظهر عامودياً.

  • SwingConstants.HORIZONTAL يجعل الـ Progess Bar يظهر أفقياً.


ترمي الإستثناء IllegalArgumentException في حال لم يتم تحديد الـ Orientation بواسطة الثوابت المخصصة لذلك.
public void setBorderPainted(boolean visibility) تستخدم لإخفاء أو إظهار حدود الـ Progess Bar الخارجية.
مكان الباراميتر visibility نضع true إذا أردنا إظهار حدود الـ Progess Bar الخارجية.
و نضع false إذا أردنا إخفائهم.

ملاحظة: إفتراضياً, حدود الـ Progess Bar الخارجية تكون ظاهرة.
public int getMinimum() ترجع رقم نوعه int يمثل أصغر قيمة في الـ Progess Bar.
public int getMaximum() ترجع رقم نوعه int يمثل أكبر قيمة في الـ Progess Bar.
public int getValue() ترجع رقم نوعه int يمثل قيمة الـ Progess Bar الحالية, و التي ستكون بين أصغر و أكبر قيمة يمكن وجودها فيه.
public double getPercentComplete() ترجع رقم نوعه double يمثل النسبة المئوية لقيمة الـ Progess Bar الحالية.

ملاحظة: الرقم الذي ترجعه يكون بين 0.0 و .1.0.
و طبعاً يمكنك ضرب هذا الرقم بـ 100 حتى تحصل على النسبة المئوية المتعارف عليها, أي لتحصل على رقم بين 0.0 و 100.
public String getString() ترجع النسبة المئوية الحالية أو النص الحالي الذي يظهر في الـ Progess Bar كنص عادي.

 طريقة إظهار نص في الـ JProgressBar  

المثال التالي يعلمك طريقة إظهار نص في الـ Progess Bar و جعل قيمته تتحرك يميناً و يساراً.


مثال يشرح طريقة إظهار نص في الـ Progess Bar و جعل قيمته تتحرك يميناً و يساراً.

Main.java
                    import javax.swing.JFrame;
                    import javax.swing.JProgressBar;

                    public class Main {

                    public static void main(String[] args) {

                    JFrame frame = new JFrame("JProgressBar demo");          // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس
                    frame.setSize(300, 150);                                 // هنا قمنا بتحديد حجم النافذة. عرضها 300 و طولها 250
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
                    frame.setLayout(null);                                   // في النافذة بنفسنا Progress Bar لذلك سنقوم بتحديد مكان الـ Layout Manager أي لم نستخدم أي null هنا وضعنا

                    JProgressBar pb = new JProgressBar();                    // Progress Bar أي قمنا بإنشاء JProgressBar هنا أنشأنا كائن من الكلاس
                    pb.setString("Please Wait");                             // Progess Bar هنا قمنا بتحديد النص الذي سيظهر في الـ
                    pb.setIndeterminate(true);                               // تتحرك يميناً و يساراً Progess Bar هنا جعلنا قيمة الـ
                    pb.setStringPainted(true);                               // ظاهراً Progress Bar هنا جعلنا نص الـ
                    pb.setBounds(70, 40, 140, 30);                           // frame في الـ Progress Bar هنا قمنا بتحديد حجم و موقع الـ

                    frame.add(pb);                                           // frame في الـ Progess Bar هنا أضفنا الـ
                    frame.setVisible(true);                                  // هنا جعلنا النافذة مرئية

                    }

                    }
                  

ستظهر لك النافذة التالية عند التشغيل.

لاحظ أن قيمة الـ Progess Bar تتحرك يميناَ و يساراً.

طريقة إظهار نص في ال JProgressBar و جعل قيمته تتحرك يميناً و يساراً في جافا

 طريقة زيادة قيمة الـ JProgressBar بواسطة Thread

المثال التالي يعلمك طريقة زيادة قيمة الـ Progress Bar بوسطة Thread.


مثال يعلمك طريقة زيادة قيمة الـ Progress Bar بوسطة Thread

Main.java
                    import javax.swing.JFrame;
                    import javax.swing.JProgressBar;

                    public class Main {

                    public static void main(String[] args) {

                    JFrame frame = new JFrame("JProgressBar demo");          // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس
                    frame.setSize(300, 150);                                 // هنا قمنا بتحديد حجم النافذة. عرضها 300 و طولها 150
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
                    frame.setLayout(null);                                   // في النافذة بنفسنا Progress Bar لذلك سنقوم بتحديد مكان الـ Layout Manager أي لم نستخدم أي null هنا وضعنا

                    JProgressBar pb = new JProgressBar(0, 1000);             // قيمه بين 0-1000 Progress Bar أي قمنا بإنشاء JProgressBar هنا أنشأنا كائن من الكلاس
                    pb.setStringPainted(true);                               // ظاهرة Progress Bar هنا جعلنا قيمة الـ
                    pb.setBounds(70, 40, 140, 30);                           // frame في الـ Progress Bar هنا قمنا بتحديد حجم و موقع الـ

                    frame.add(pb);                                           // frame في الـ Progress Bar هنا أضفنا الـ
                    frame.setVisible(true);                                  // هنا جعلنا النافذة مرئية

                    int currentValue = pb.getValue();                        // currentValue الأولية في المتغير Progress Bar هنا قمنا بتخزين قيمة الـ

                    while(currentValue < pb.getMaximum())                 // كل 0.1 ثانية Progress Bar هنا سيتم إضافة 10 على قيمة الـ
                    {
                    try{ Thread.sleep(100); }
                    catch(Exception e){ }
                    currentValue += 10;
                    pb.setValue(currentValue);
                    }

                    }

                    }
                  

ستظهر لك النافذة التالية عند التشغيل.

لاحظ أن قيمة الـ Progress Bar ستزيد بشكل تلقائي عند تشغل البرنامج حتى تصل للقيمة القصوى.

طريقة زيادة قيمة ال JProgressBar من خلال Thread في جافا

طريقة تغيير لون الـ JProgressBar 

المثال التالي يعلمك طريقة تغيير لون الـ Progress Bar على حسب طول النص المدخل في JPasswordField.


مثال طريقة تغيير لون الـ Progress Bar على حسب طول النص المدخل في JPasswordField.

Main.java
                    import javax.swing.JFrame;
                    import javax.swing.JLabel;
                    import javax.swing.JPasswordField;
                    import javax.swing.JProgressBar;
                    import java.awt.event.KeyEvent;
                    import java.awt.event.KeyListener;
                    import java.awt.Color;

                    public class Main {

                    public static void main(String[] args) {

                    // هنا قمنا بإنشاء النافذة و جميع الأشياء التي سنضعها فيها
                    JFrame frame = new JFrame("JProgressBar demo");

                    JLabel label_1 = new JLabel("Password");
                    JLabel label_2 = new JLabel("Strength");
                    JPasswordField password = new JPasswordField();
                    JProgressBar progress = new JProgressBar(0, 10);

                    // frame هنا قمنا بتحديد أماكن الأشياء التي سنضيفها في الـ
                    label_1.setBounds(20, 20, 60, 30);
                    password.setBounds(90, 20, 140, 30);
                    label_2.setBounds(20, 60, 60, 30);
                    progress.setBounds(90, 68, 140, 15);

                    // frame هنا قمنا بإضافة جميع الأشياء التي قمنا بتعريفها سابقاً في الـ
                    frame.add(label_1);
                    frame.add(password);
                    frame.add(label_2);
                    frame.add(progress);

                    // frame هنا قمنا بتحديد خصائص الـ
                    frame.setSize(300, 150);
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(null);
                    frame.setVisible(true);


                    // password هنا نضع الأوامر التي نريد تنفيذها عند كتابة أو حذف أي حرف موجود في مربع الـ
                    password.addKeyListener(new KeyListener() {
                    @Override
                    public void keyTyped(KeyEvent e) { }

                    @Override
                    public void keyPressed(KeyEvent e) { }

                    @Override
                    public void keyReleased(KeyEvent e)
                    {
                    int passLength = password.getPassword().length;
                    progress.setValue(passLength);

                    // إلى الأحمر Progress Bar إذا قام المستخدم بإدخال 4 أحرف, سيتم تغيير لون الـ
                    if(passLength < 5)
                    progress.setForeground(Color.red);

                    // إلى الأصفر Progress Bar إذا قام المستخدم بإدخال 5-10 أحرف, سيتم تغيير لون الـ
                    else if(passLength >= 5 && passLength < 10)
                    progress.setForeground(Color.yellow);

                    // إلى الأخضر Progress Bar إذا قام المستخدم بإدخال 10 أحرف أو أكثر, سيتم تغيير لون الـ
                    else if(passLength >= 10)
                    progress.setForeground(Color.green);

                    }
                    });

                    }

                    }
                  

ستظهر لك النافذة التالية عند التشغيل.

قم بإدخال أي نص و لاحظ كيف سيتغير لون الـ Progress Bar على حسب عدد الأحرف المدخلة.

طريقة تغيير لون ال JProgressBar على حسب قيمته في جافا

  تعلم Java Swing 

أفضل كورس لتعلم Java swing من الصفر الى الاحتراف .