الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

شرح : صنع إدارة شكل تخطيط مثل Flowlayout .

بدأه rohaili في 7 أكتوبر 2009 · 4 رد · 1,897 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه ،،

اللهم يا معلم إبراهيم علمنا ويامفهم سليمان فهمنا ، اللهم لا علم لنا إلا ما علمتنا إنك أنت علام الغيوب .

أقوم على عمل برنامج يحتم علي أن أقوم بعمل إدارة شكل تخطيط خاصة مثل 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());

وكما تلاحظون فقد أضفت إليها خمسة مربعات نص للتجربة وكانت النتيجة جيدة كما تظهر الصورة التالية :

post-63809-1254890420_thumb.jpg

ملاحظة : اللون الأخضر لتمييز الحاوية فقط .

المشروع كاملا بهيئة netbeans في المرفقات .

layoutproject.zip

300_130.gif

#2

بارك الله فيك يا أخي

وشكرا لمشاركتك هذا المشروع القيم

الايميل غير صحيح

يرجى تصحيح الايميل برسالة لأحد مدراء المنتدى

#3

شيء مميز أخي , بارك الله فيك.

نرجوا رفع الموضوع إلى قائمة المواضيع المميزة.

#4

السلام عليكــم ورحمـة الله وبركاتــه ،،

جميل جدا ورائع يا أخ rohaili

ارجو ان تسامحنى لانى اعتقدت انك مبتدئ

لكن انت طلعت أستاذ

لا تزعل منى

أخوك محمد فتحى


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#5

موضوع جميل جداً أخ rohaili

لي فترة أريد قراءته لكني لا أجد الوقت

بأمانة تمنيت أني قرءته من فترة

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة