بســم الله الـرحمــن الرحيــم
السلام عليكــم ورحمـة الله وبركاتــه ،،
اللهم يا معلم إبراهيم علمنا ويامفهم سليمان فهمنا ، اللهم لا علم لنا إلا ما علمتنا إنك أنت علام الغيوب .
أقوم على عمل برنامج يحتم علي أن أقوم بعمل إدارة شكل تخطيط خاصة مثل gridbaglayout و flowlayout وقد بدأت بعمل إدارة بسيطة للتجربة وقد نجحت الفكرة وأحببت أن اشارككم بها وهأنا اضعها بين أيديكم :
أولا : أنشأت صنف اسميته layout يطبق الواجهة java.awt.LayoutManager ويطبق الخمس دوال الموجودة أمامكم في الصنف layout كحد أدنى ، مع العلم أن الصنف java.awt.LayoutManager يوجد به دوال أخرى اختيارية لمن أراد التوسع في الموضوع .
ثانيا : بالنسبة للدالتين preferredLayoutSize و minimumLayoutSize فقد جعلتهما يعيدان اصفار لأن القيمتان اللتان يعيدانها غير مهمتان بالنسبة لي حتى هذه اللحظة .
ثالثا : أهم دالة layoutContainer وهي التي تقوم بترتيب العناصر في الحاوية ، وقد جعلتها تقوم بترتيب العناصر بشكل مدرج من الزاوية العليا اليسرى إلى الزاوية اليمنى السفلى ، والشرح موجود في نفس الدالة .
الصنف layout :
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
public class layout implements java.awt.LayoutManager {
public void addLayoutComponent(String name, Component comp) {
}
public void removeLayoutComponent(Component comp) {
}
public Dimension preferredLayoutSize(Container parent) {
return new Dimension(0, 0);
}
public Dimension minimumLayoutSize(Container parent) {
return new Dimension(0, 0);
}
public void layoutContainer(Container parent) {
//parent الكائن الحاوي للعناصر
//الأمر التالي يضع العنصر الأول عند الزاوية العليا اليسرى
//ويحدد له العرض والارتفاع بالعرض والارتفاع المفضل للعنصر نفسه
//(int) لتحويل القيمة من double إلى integer
parent.getComponent(0).setBounds(0, 0,
(int) parent.getComponent(0).getPreferredSize().getWidth(), (int) parent.getComponent(0).getPreferredSize().getHeight());
int x = 0;//المتغير الذي سوف أضع فيه الاحداثيات السينية
int y = 0;//المتغير الذي سوف أضع فيه الاحداثيات الصادية
//الحلقة التالية تبدأ بالمرور على العناصر بدأ من العنصر الثاني
//parent.getComponentCount() تعيد عدد العناصر في الحاوية
for (int i = 1; i < parent.getComponentCount(); i++){
//أهم نقطة
//الاحداثي السيني للعنصر الثاني هو عرض العنصر الأول
//الاحداثي السيني للعنصر الثالث هو عرض العنص الأول والثاني وهلم جرا
//وقد وضعت المتغير x لكي أجمع فيه عرض العناصر بالترتيب
x += parent.getComponent(i - 1).getPreferredSize().getWidth();
//نفس الكلام بالنسبة للمتغير y
y += parent.getComponent(i - 1).getPreferredSize().getHeight();
parent.getComponent(i).setBounds(
//الاحداثي السيني للعنصر هو مجموع عرض العناصر السابقة له ، وكذلك الاحداثي الصادي
(int) x, (int) y,
//العرض والارتفاع للعنصر هما نفس العرض والارتفاع المفضلين للعنصر نفسه ولم أحدث فيهما شئ
(int) parent.getComponent(i).getPreferredSize().getWidth(),
(int) parent.getComponent(i).getPreferredSize().getHeight());
}
}
}
package layoutproject;
رابعا : قمت بتطبيق الدالة على اللوحة mainPanel المعروفة لدى مستخدمي netbeans للتجربة ويمكن تطبيقها على أي لوحة ، كالتالي :
mainPanel.setBackground(Color.GREEN);
javax.swing.JTextField t1 = new javax.swing.JTextField("1");
javax.swing.JTextField t2 = new javax.swing.JTextField("2");
javax.swing.JTextField t3 = new javax.swing.JTextField("3");
javax.swing.JTextField t4 = new javax.swing.JTextField("4");
javax.swing.JTextField t5 = new javax.swing.JTextField("5");
mainPanel.add(t1);
mainPanel.add(t2);
mainPanel.add(t3);
mainPanel.add(t4);
mainPanel.add(t5);
mainPanel.setLayout(new layout());
وكما تلاحظون فقد أضفت إليها خمسة مربعات نص للتجربة وكانت النتيجة جيدة كما تظهر الصورة التالية :
ملاحظة : اللون الأخضر لتمييز الحاوية فقط .
المشروع كاملا بهيئة netbeans في المرفقات .

