في عالم تطوير واجهات المستخدم الرسومية (GUI) باستخدام Java Swing، يُعد تنظيم المكونات داخل الحاويات أمراً بالغ الأهمية لإنشاء تطبيقات جذابة وسهلة الاستخدام. يقدم Swing مجموعة من مديري التخطيط (Layout Managers) التي تساعد المطورين على ترتيب المكونات بمرونة وفعالية. من بين هذه المديرين، يبرز BorderLayout كأحد أكثر الخيارات شيوعاً وبساطة لتوزيع المكونات في مناطق محددة.
مقدمة إلى BorderLayout
BorderLayout هو مدير تخطيط يقسم الحاوية (مثل JFrame أو JPanel) إلى خمسة مناطق رئيسية: الشمال (NORTH)، الجنوب (SOUTH)، الشرق (EAST)، الغرب (WEST)، والوسط (CENTER). كل منطقة من هذه المناطق يمكن أن تحتوي على مكون واحد فقط. إذا تمت إضافة أكثر من مكون إلى نفس المنطقة، فسيتم عرض المكون الأخير المضاف فقط.
- NORTH: يوضع في الجزء العلوي من الحاوية.
- SOUTH: يوضع في الجزء السفلي من الحاوية.
- EAST: يوضع في الجزء الأيمن من الحاوية.
- WEST: يوضع في الجزء الأيسر من الحاوية.
- CENTER: يوضع في المساحة المتبقية في منتصف الحاوية، وهو يتمدد ليملأ هذه المساحة.
يُعد BorderLayout هو مدير التخطيط الافتراضي لـ JFrame و JDialog و JWindow.
مثال عملي: استخدام BorderLayout في JFrame
يوضح المثال التالي كيفية إنشاء نافذة JFrame وتوزيع خمسة أزرار JButton في المناطق الخمسة المختلفة التي يوفرها BorderLayout.
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.BorderLayout;
public class Main {
public static void main (String[] args) {
// 1. إنشاء كائن JFrame (النافذة الرئيسية)
JFrame frame = new JFrame ( "BorderLayout Demo" );
// 2. تحديد حجم النافذة (العرض والطول)
frame.setSize( 400 , 300 );
// 3. تحديد سلوك الإغلاق الافتراضي للنافذة
// عند النقر على زر الإغلاق، سيتم إنهاء التطبيق
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 4. تعيين BorderLayout كمدير تخطيط للنافذة
// هذا يضمن أن المكونات ستترتب وفقاً لمناطق BorderLayout
frame.setLayout( new BorderLayout ());
// 5. إنشاء خمسة أزرار JButton
JButton b1 = new JButton ( "North" );
JButton b2 = new JButton ( "South" );
JButton b3 = new JButton ( "East" );
JButton b4 = new JButton ( "West" );
JButton b5 = new JButton ( "Center" );
// 6. إضافة الأزرار إلى مناطق BorderLayout المختلفة في النافذة
// يتم تحديد المنطقة كمعامل ثانٍ لدالة add()
frame.add(b1, BorderLayout.NORTH);
frame.add(b2, BorderLayout.SOUTH);
frame.add(b3, BorderLayout.EAST);
frame.add(b4, BorderLayout.WEST);
frame.add(b5, BorderLayout.CENTER);
// 7. جعل النافذة مرئية
// يجب أن تكون هذه الخطوة الأخيرة بعد إضافة جميع المكونات
frame.setVisible( true );
}
}
شرح الكود
- الاستيرادات (Imports):
javax.swing.JFrame: لاستخدام فئة النافذة الرئيسية.javax.swing.JButton: لاستخدام فئة الأزرار.java.awt.BorderLayout: لاستخدام مدير التخطيطBorderLayout.
- إنشاء النافذة (
JFrame):JFrame frame = new JFrame("BorderLayout Demo");
نقوم بإنشاء كائن من الفئةJFrameمع تحديد عنوان للنافذة. - تحديد حجم النافذة:
frame.setSize(400, 300);
تحدد هذه الدالة أبعاد النافذة، حيث يكون العرض 400 بكسل والطول 300 بكسل. - تحديد سلوك الإغلاق:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
تضمن هذه الدالة أن التطبيق سينتهي تماماً عند إغلاق النافذة، بدلاً من إخفائها فقط. - تعيين مدير التخطيط:
frame.setLayout(new BorderLayout());
هنا، نحدد أن النافذة ستستخدمBorderLayoutلترتيب مكوناتها الداخلية. هذا هو المفتاح لتفعيل تقسيم النافذة إلى المناطق الخمسة. - إنشاء الأزرار (
JButton):JButton b1 = new JButton("North");...JButton b5 = new JButton("Center");
نقوم بإنشاء خمسة أزرار، كل منها يحمل نصاً يمثل المنطقة التي سيتم وضعه فيها. - إضافة المكونات إلى النافذة:
frame.add(b1, BorderLayout.NORTH);
تُستخدم دالةadd()لإضافة المكونات إلى النافذة. المعامل الثاني (مثلBorderLayout.NORTH) يحدد المنطقة التي سيتم وضع الزر فيها. يتم تكرار هذه العملية لكل زر في المنطقة المخصصة له. - إظهار النافذة:
frame.setVisible(true);
هذه الدالة تجعل النافذة مرئية للمستخدم. من المهم استدعاؤها بعد إضافة جميع المكونات لضمان عرضها بشكل صحيح.
النتيجة المتوقعة
عند تشغيل الكود، ستظهر لك نافذة Swing تعرض الأزرار الخمسة مرتبة بدقة في مناطق BorderLayout المختلفة، كما هو موضح في الصورة التالية:
خاتمة
يُعد BorderLayout أداة قوية ومرنة لتنظيم واجهات المستخدم في تطبيقات Swing، خاصةً عند الحاجة إلى تقسيم الشاشة إلى مناطق وظيفية واضحة. من خلال فهم كيفية عمله وتطبيق الأمثلة العملية، يمكنك البدء في بناء واجهات مستخدم منظمة واحترافية لتطبيقات Java الخاصة بك.