إضافة Check Boxes و Radio Buttons إلى JMenuBar في Java Swing


  في تطوير تطبيقات سطح المكتب باستخدام Java Swing، تعد القوائم (Menus) وشريط القوائم (Menu Bars) عناصر أساسية لتوفير واجهة مستخدم تفاعلية. يوضح هذا المقال كيفية إضافة عناصر قائمة متقدمة مثل مربعات الاختيار (Check Boxes) وأزرار الراديو (Radio Buttons) إلى JMenuBar، مما يتيح للمستخدمين تحديد خيارات متعددة أو اختيار خيار واحد من مجموعة. سنستعرض مثالاً عملياً يوضح كيفية بناء هذه المكونات وتجميعها بشكل صحيح.

المثال التالي يوضح كيفية إضافة JCheckBoxMenuItem و JRadioButtonMenuItem كعناصر في قائمة ضمن JMenuBar:

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.ButtonGroup;

public class Main {
    public static void main (String[] args) {
        JFrame frame = new JFrame ( "JMenuBar demo" );
        // هنا أنشأنا كائن من الكلاس JFrame أي قمنا بإنشاء نافذة مع وضع عنوان لها
        frame.setSize( 500 , 250 );
        // هنا قمنا بتحديد حجم النافذة. عرضها 500 و طولها 250
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // هنا جعلنا زر الخروج من النافذة يغلق البرنامج

        // هنا قمنا بتعريف شريط القوائم
        JMenuBar menuBar = new JMenuBar ();

        // هنا قمنا بتعريف قائمة واحدة
        JMenu menu = new JMenu ( "Menu" );

        // هنا قمنا بتعريف إثنين Check Box
        JCheckBoxMenuItem connect = new JCheckBoxMenuItem ( "Connect" );
        JCheckBoxMenuItem recieveNotifications = new JCheckBoxMenuItem ( "Recieve Notifications" );

        // هنا قمنا بتعريف ثلاثة Radio Buttons
        JRadioButtonMenuItem isAvailable = new JRadioButtonMenuItem ( "Available" );
        JRadioButtonMenuItem isBusy = new JRadioButtonMenuItem ( "Busy" );
        JRadioButtonMenuItem isAway = new JRadioButtonMenuItem ( "Away" );

        // هنا قمنا بتعريف عنصر عادي
        JMenuItem exit = new JMenuItem ( "Exit" );

        // هنا قمنا بتعريف كائن من الكلاس ButtonGroup لوضع الثلاثة Radio Buttons ضمن مجموعة واحدة
        ButtonGroup group = new ButtonGroup ();

        // هنا وضعنا الثلاثة Radio Buttons في نفس المجموعة و بالتالي أصبح بالإمكان إختيار أحدهم فقط
        group.add(isAvailable);
        group.add(isBusy);
        group.add(isAway);

        // هنا جعلنا الـ connect و الـ isAvailable مختارين بشكل إفتراضي
        connect.setSelected( true );
        isAvailable.setSelected( true );

        // هنا قمنا بوضع القائمة في شريط القوائم
        menuBar.add(menu);

        // هنا قمنا بوضع جميع العناصر في القائمة
        menu.add(connect);
        menu.add(recieveNotifications);
        menu.addSeparator(); // هنا أضفنا خط فاصل
        menu.add(isAvailable);
        menu.add(isBusy);
        menu.add(isAway);
        menu.addSeparator(); // هنا أضفنا خط فاصل
        menu.add(exit);

        // هنا قمنا بوضع شريط القوائم في الـ frame
        frame.setJMenuBar(menuBar);

        // هنا جعلنا الـ frame مرئية
        frame.setVisible( true );
    }
}

يوضح المثال أعلاه كيفية بناء شريط قوائم (JMenuBar) يحتوي على قائمة (JMenu) تضم أنواعاً مختلفة من عناصر القائمة:
  • JCheckBoxMenuItem: لإنشاء مربعات اختيار تسمح للمستخدم بتحديد خيارات متعددة بشكل مستقل. في هذا المثال، تم إنشاء 'Connect' و 'Recieve Notifications'.
  • JRadioButtonMenuItem: لإنشاء أزرار راديو تسمح للمستخدم باختيار خيار واحد فقط من مجموعة. تم إنشاء 'Available', 'Busy', و 'Away'.
  • ButtonGroup: هذا الكلاس ضروري لتجميع عناصر JRadioButtonMenuItem معاً. عند إضافة أزرار الراديو إلى ButtonGroup، يضمن ذلك أن اختيار أحدها سيؤدي تلقائياً إلى إلغاء تحديد أي زر راديو آخر في نفس المجموعة.
  • JMenuItem: لعناصر القائمة القياسية، مثل 'Exit'.
تم تهيئة النافذة (JFrame) وشريط القوائم، ثم أضيفت العناصر إلى القائمة، مع استخدام menu.addSeparator() لإضافة فواصل بصرية بين مجموعات العناصر. أخيراً، تم تعيين شريط القوائم للنافذة وجعل النافذة مرئية.

عند تشغيل هذا الكود، ستظهر لك النافذة التالية التي تعرض شريط القوائم مع مربعات الاختيار وأزرار الراديو العاملة:

بهذا نكون قد تعلمنا كيفية دمج عناصر التحكم التفاعلية هذه بفعالية ضمن قوائم تطبيقات Java Swing، مما يعزز من مرونة واجهة المستخدم وقدرتها على التفاعل مع المستخدم.