Java Swing - الكلاس GroupLayout

Java Swing  الكلاس GroupLayout  

الكلاس GroupLayout يستخدم لترتيب الأشياء التي نضيفها ضمن مجموعات.
كل مجموعة يتم وضعها تكون في الأساس عبارة عن كائن من أحد الكلاسات التي ترث من الكلاس Group.

إنتبه: هنا سيتوجب عليك تحديد تسلسل جميع الأشياء التي أضفتها في المجموعة أفقياً و عمودياً.
و في حال لم تحدد تسلسل جميع الأشياء التي أضفتها أفقياً و عامودياً فإنه سيتم رمي الإستثناء IllegalArgumentException.


بنا   الكلاس GroupLayout

public class GroupLayout
extends Object
implements LayoutManager2
	

الكلاس GroupLayout يحتوي على ثلاث كلاسات بداخله تم تصميمهم لتحديد طريقة ترتيب عناصر كل مجموعة. الكلاسات هم:

  • الكلاس SequentialGroup يرث من الكلاس Group, و يستخدم لترتيبب الأشياء التي نضعها في المجموعة وراء بعضها البعض.

  • الكلاس ParallelGroup يرث من الكلاس Group, و يستخدم لترتيبب الأشياء التي نضعها في المجموعة بشكل متوازي أفقياً أو عامودياً.

  • الكلاس الثابت Alignment يحتوي على الثوابت ( BASELINE, CENTER, LEADING, TRAILING ) و التي تستخدم لتحديد طريقة إصطفاف الأشياء التي يتم وضعها في المجموعة.

ثوابت الكلاس GroupLayout 

الجدول التالي يحتوي على ثوابت الكلاس GroupLayout.

الثابت إستخدامه
DEFAULT_SIZE يستخدم لتحديد الحجم الإفتراضي للأشياء أو الفراغ بينهم.
PREFERRED_SIZE يستخدم لتحديد الحجم المفضل للأشياء أو الفراغ بينهم.

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

الجدول التالي يحتوي على كونستركتورات الكلاس GroupLayout.

الكونستركتور مع تعريفه
public GroupLayout(Container host) يرتب الأشياء التي نضيفها في النافذة أو الحاوية كمجموعة واحدة.
مكان الباراميتر host نضع النافذة أو الحاوية التي سيتم وضع المجموعة فيها.

يرمي الإستثناء IllegalArgumentException في حال تم وضع null مكان الباراميتر host.

دوال الكلاس GroupLayout

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

الدالة مع تعريفها
public GroupLayout.SequentialGroup createSequentialGroup() ترجع كائن من الكلاس SequentialGroup.
أي تستخدم لإنشاء مجموعة ترتب المحتوى الذي يتم وضعه فيها وراء بعضه البعض.
public GroupLayout.ParallelGroup createParallelGroup(GroupLayout.Alignment alignment) ترجع كائن من الكلاس ParallelGroup.
أي تستخدم لإنشاء مجموعة ترتب المحتوى الذي يتم وضعه فيها بشكل متوازي مع تحديد طريقة إصطفاف الأشياء التي نضيفها فيها.
مكان الباراميتر alignment نضع إحدى ثوابت الكلاس Alignment المخصصة لتحديد طريقة إصطفاف الأشياء التي يتم وضعها في المجموعة.

ترمي الإستثناء IllegalArgumentException في حال تم وضع null مكان الباراميتر alignment.
public void setHorizontalGroup(GroupLayout.Group group) تستخدم لتحديد تسلسل الأشياء المراد إضافتها في المجموعة أفقياً.
مكان الباراميتر group نضع المجموعة التي سيتم تحديد تسلسل محتواها أفقياً.

ترمي الإستثناء IllegalArgumentException في حال تم وضع null مكان الباراميتر group.
public void setVerticalGroup(GroupLayout.Group group) تستخدم لتحديد تسلسل الأشياء المراد إضافتها في المجموعة عامودياً.
مكان الباراميتر group نضع المجموعة التي سيتم تحديد تسلسل محتواها عامودياً.

ترمي الإستثناء IllegalArgumentException في حال تم وضع null مكان الباراميتر group.
public void setAutoCreateGaps(boolean autoCreatePadding) تستخدم لإضافة هامش بشكل تلقائي بين الأشياء التي تم إضافتها في المجموعة.
مكان الباراميتر autoCreatePadding نضع القيمة true في حال أردنا إضافة هامش بشكل تلقائي بين الأشياء الموضوعة في المجموعة.
و نضع false إذا لم نرد ذلك.
public void setAutoCreateContainerGaps(boolean autoCreateContainerPadding) تستخدم لإضافة هامش بشكل تلقائي في محيط الأشياء التي تم إضافتها في المجموعة.
مكان الباراميتر autoCreatePadding نضع القيمة true في حال أردنا إضافة هامش بشكل تلقائي بين الأشياء الموضوعة في المجموعة و حدودها.
و نضع false إذا لم نرد ذلك.

 طريقة ترتيب محتوى الـ JFrame بشكل متوازي أفقياً بواسطة الكلاس GroupLayout

المثال التالي يعلمك طريقة ترتيب محتوى الـ Frame بشكل متوازي أفقياً بواسطة الكلاس GroupLayout.


مثال طريقة ترتيب محتوى الـ Frame بشكل متوازي أفقياً بواسطة الكلاس GroupLayout

Main.java
					import javax.swing.JFrame;
					import javax.swing.JButton;
					import javax.swing.GroupLayout;
					import java.awt.Container;

					public class Main {

					public static void main(String[] args) {

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

					// لترتيب الأشياء التي نضيفها بداخلها GroupLayout هنا جعلنا النافذة تستخدم الـ
					Container container = frame.getContentPane();
					GroupLayout groupLayout = new GroupLayout(container);
					container.setLayout(groupLayout);

					// هنا قمنا بإضافة هوامش بين النافذة و المجموعة و بين جميع الأشياء التي سنضيفها في المجموعة
					groupLayout.setAutoCreateGaps(true);
					groupLayout.setAutoCreateContainerGaps(true);
					groupLayout.preferredLayoutSize(container);

					// هنا قمنا بتعريف 3 أزرار
					JButton btn1 = new JButton("Button 1");
					JButton btn2 = new JButton("Button 2");
					JButton btn3 = new JButton("Button 3");

					// هنا قمنا بترتيب جميع الأزرار في نفس المجموعة أفقياً وراء بعضهم
					groupLayout.setHorizontalGroup(
					groupLayout.createSequentialGroup()
					.addComponent(btn1)
					.addComponent(btn2)
					.addComponent(btn3));

					// هنا قمنا بترتيب جميع الأزرار في نفس المجموعة بشكل متوازي عامودياً
					groupLayout.setVerticalGroup(
					groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
					.addComponent(btn1)
					.addComponent(btn2)
					.addComponent(btn3));

					frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
					frame.pack();                                           // هنا جعلنا حجم النافذة يناسب حجم المحتوى
					frame.setVisible(true);                                 // هنا جعلنا النافذة مرئية

					}

					}
				  

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

طريقة ترتيب محتوى ال JFrame بشكل متوازي أفقياً بواسطة الكلاس GroupLayout في جافا

 ترتيب محتوى الـ JFrame بشكل متوازي عامودياً بواسطة الكلاس GroupLayout

المثال التالي يعلمك طريقة ترتيب محتوى الـ Frame بشكل متوازي عامودياً بواسطة الكلاس GroupLayout.


مثال طريقة ترتيب محتوى الـ Frame بشكل متوازي عامودياً بواسطة الكلاس GroupLayout.

Main.java
					import javax.swing.JFrame;
					import javax.swing.JButton;
					import javax.swing.GroupLayout;
					import java.awt.Container;

					public class Main {

					public static void main(String[] args) {

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

					// لترتيب الأشياء التي نضيفها بداخلها GroupLayout هنا جعلنا النافذة تستخدم الـ
					Container container = frame.getContentPane();
					GroupLayout groupLayout = new GroupLayout(container);
					container.setLayout(groupLayout);

					// هنا قمنا بإضافة هوامش بين النافذة و المجموعة و بين جميع الأشياء التي سنضيفها في المجموعة
					groupLayout.setAutoCreateGaps(true);
					groupLayout.setAutoCreateContainerGaps(true);
					groupLayout.preferredLayoutSize(container);

					// هنا قمنا بتعريف 3 أزرار
					JButton btn1 = new JButton("Button 1");
					JButton btn2 = new JButton("Button 2");
					JButton btn3 = new JButton("Button 3");

					// هنا قمنا بترتيب جميع الأزرار في نفس المجموعة بشكل متوازي أفقياً
					groupLayout.setHorizontalGroup(
					groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
					.addComponent(btn1)
					.addComponent(btn2)
					.addComponent(btn3));

					// هنا قمنا بترتيب جميع الأزرار في نفس المجموعة بشكل أفقياً وراء بعضهم البعض
					groupLayout.setVerticalGroup(
					groupLayout.createSequentialGroup()
					.addComponent(btn1)
					.addComponent(btn2)
					.addComponent(btn3));

					frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
					frame.pack();                                           // هنا جعلنا حجم النافذة يناسب حجم المحتوى
					frame.setVisible(true);                                 // هنا جعلنا النافذة مرئية

					}

					}
				  

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

طريقة ترتيب محتوى ال JFrame بشكل متوازي عامودياً بواسطة الكلاس GroupLayout في جافا

 طريقة ترتيب محتوى الـ JFrame بشكل متوازي أفقياً و عامودياً بواسطة الكلاس GroupLayout

المثال التالي يعلمك طريقة ترتيب محتوى الـ Frame بشكل متوازي أفقياً و عامودياً بواسطة الكلاس GroupLayout.


مثال طريقة ترتيب محتوى الـ Frame بشكل متوازي أفقياً و عامودياً بواسطة الكلاس GroupLayout.

Main.java
					import javax.swing.JFrame;
					import javax.swing.JButton;
					import javax.swing.GroupLayout;
					import java.awt.Container;

					public class Main {

					public static void main(String[] args) {

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

					// لترتيب الأشياء التي نضيفها بداخلها GroupLayout هنا جعلنا النافذة تستخدم الـ
					Container container = frame.getContentPane();
					GroupLayout groupLayout = new GroupLayout(container);
					container.setLayout(groupLayout);

					// هنا قمنا بإضافة هوامش بين النافذة و المجموعات و بين جميع الأشياء التي سنضيفها في المجموعات
					groupLayout.setAutoCreateGaps(true);
					groupLayout.setAutoCreateContainerGaps(true);
					groupLayout.preferredLayoutSize(container);

					// هنا قمنا بتعريف 4 أزرار
					JButton btn1 = new JButton("Button 1");
					JButton btn2 = new JButton("Button 2");
					JButton btn3 = new JButton("Button 3");
					JButton btn4 = new JButton("Button 4");

					// وراء بعضهم أفقياً btn2 ثم الـ btn1 هنا قمنا بإضافة الـ
					// btn4 و الـ btn3 ثم أضفنا مجموعة جديدة متوازية و أضفنا فيها الـ
					groupLayout.setHorizontalGroup(
					groupLayout.createSequentialGroup()
					.addComponent(btn1)
					.addComponent(btn2)
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addComponent(btn3)
                    .addComponent(btn4)
					)
					);

					// وراء بعضهم ضمن مجموعة متوازية عامودياً. أي على نفس السطر btn3 ثم الـ btn2 ثم الـ btn1 هنا قمنا بإضافة الـ
					// لأنه موجود معه في نفس المجموعة btn3 لوحده و بالتالي سيظهر تحت الـ btn4 ثم أضفنا الـ
					groupLayout.setVerticalGroup(
					groupLayout.createSequentialGroup()
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(btn1)
                    .addComponent(btn2)
                    .addComponent(btn3)
					)
					.addComponent(btn4)
					);

					frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
					frame.pack();                                           // هنا جعلنا حجم النافذة يناسب حجم المحتوى
					frame.setVisible(true);                                 // هنا جعلنا النافذة مرئية

					}

					}
				  

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

طريقة ترتيب محتوى ال JFrame بشكل متوازي أفقياً و عامودياً بواسطة الكلاس GroupLayout في جافا

 طريقة إنشاء واجهة تسجيل دخول بواسطة الكلاس GroupLayout

المثال التالي يعلمك طريقة إنشاء واجهة تسجيل دخول بواسطة الكلاس GroupLayout.


مثال طريقة إنشاء واجهة تسجيل دخول بواسطة الكلاس GroupLayout

Main.java
					import javax.swing.JFrame;
					import javax.swing.JTextField;
					import javax.swing.JLabel;
					import javax.swing.JButton;
					import javax.swing.GroupLayout;
					import java.awt.Container;

					public class Main {

					public static void main(String[] args) {

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

					// لترتيب الأشياء التي نضيفها بداخلها GroupLayout هنا جعلنا النافذة تستخدم الـ
					Container container = frame.getContentPane();
					GroupLayout groupLayout = new GroupLayout(container);
					container.setLayout(groupLayout);

					// هنا قمنا بإضافة هوامش بين النافذة و المجموعات و بين جميع الأشياء التي سنضيفها في المجموعات
					groupLayout.setAutoCreateGaps(true);
					groupLayout.setAutoCreateContainerGaps(true);
					groupLayout.preferredLayoutSize(container);

					// هنا قمنا بتعريف جميع الأشياء التي سنضيفها في النافذة
					JLabel label_1 = new JLabel("User");
					JLabel label_2 = new JLabel("Password");
					JTextField textField_1 = new JTextField();
					JTextField textField_2 = new JTextField();
					JButton button_1 = new JButton("Register");
					JButton button_2 = new JButton("Login");

					// هنا قمنا بتعريف مجموعتين أساسيتين لوضع المحتوى على عامودين و مجموعة ثالثة داخل المجموعة الثانية
					groupLayout.setHorizontalGroup(
					groupLayout.createSequentialGroup()
					// في مجموعة متوازية أفقياً label_2 و الـ label_1 هنا وضعنا الـ
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addComponent(label_1)
                    .addComponent(label_2)
					)
					// في مجموعة متوازية أفقياً textField_2 و الـ textField_1 هنا وضعنا الـ
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addComponent(textField_1)
                    .addComponent(textField_2)

                    // في مجموعة متتالية و وضعناها مع المجموعة الثانية button_2 و الـ button_1 هنا وضعنا الـ
                    .addGroup(groupLayout.createSequentialGroup()
					.addComponent(button_1)
					.addComponent(button_2)
                    )
					)
					);

					// هنا قمنا بتعريف ثلاث مجموعات عامودية, لوضع المحتوى على ثلاث أسطر
					groupLayout.setVerticalGroup(
					groupLayout.createSequentialGroup()
					// في مجموعة متوازية عامودياً و بالتالي سيظهروا في السطر الأول textField_1 و الـ label_1 هنا وضعنا الـ
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(label_1)
                    .addComponent(textField_1)
					)
					// في مجموعة متوازية عامودياً و بالتالي سيظهروا في السطر الثاني textField_2 و الـ label_2 هنا وضعنا الـ
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(label_2)
                    .addComponent(textField_2)
					)
					// في مجموعة متوازية عامودياً و بالتالي سيظهروا في السطر الثالث button_2 و الـ button_1 هنا وضعنا الـ
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(button_1)
                    .addComponent(button_2)
					)
					);

					frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
					frame.pack();                                           // هنا جعلنا حجم النافذة يناسب حجم المحتوى
					frame.setVisible(true);                                 // هنا جعلنا النافذة مرئية

					}

					}
				  

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

طريقة إنشاء واجهة تسجيل دخول بواسطة الكلاس GroupLayout في جافا

  تحديد حجم الأشياء التي تضيفها في الـ JFrame  عند إستخدام الكلاس GroupLayout

المثال التالي يعلمك طريقة تحديد حجم الأشياء التي تضيفها في الـ Frame و حجم الفراغات بينهم عند إستخدام الـكلاس GroupLayout.

ملاحظة: هذا نفس المثال الرابع مع تعديل الأحجام فقط, لهذا ستجد أننا شرحنا فقط أكواد تعديل الأحجام التي أضفناه على المثال الرابع.


مثال  تحديد حجم الأشياء التي تضيفها في الـ Frame  عند إستخدام الـكلاس GroupLayout

Main.java
					import javax.swing.JFrame;
					import javax.swing.JTextField;
					import javax.swing.JLabel;
					import javax.swing.JButton;
					import javax.swing.GroupLayout;
					import java.awt.Container;

					public class Main {

					public static void main(String[] args) {

					JFrame frame = new JFrame("Login");

					Container container = frame.getContentPane();
					GroupLayout groupLayout = new GroupLayout(container);
					container.setLayout(groupLayout);

					groupLayout.setAutoCreateContainerGaps(true);
					groupLayout.preferredLayoutSize(container);

					JLabel label_1 = new JLabel("User");
					JLabel label_2 = new JLabel("Password");
					JTextField textField_1 = new JTextField();
					JTextField textField_2 = new JTextField();
					JButton button_1 = new JButton("Register");
					JButton button_2 = new JButton("Login");

					groupLayout.setHorizontalGroup(
					groupLayout.createSequentialGroup()
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addComponent(label_1)
                    .addComponent(label_2)
					)
					// هنا قمنا بإضافة هامش بنسبة 20 بيكسل على يمين المجموعة الأولى أفقياً
					.addGap(20)
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addComponent(textField_1, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE)
                    .addComponent(textField_2, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE)

                    // هنا قمنا بجعل عرض الأزرار يساوي 90 بيكسل و وضعنا بينهما هامش بنسبة 20 بيكسل
                    .addGroup(groupLayout.createSequentialGroup()
					.addComponent(button_1, GroupLayout.PREFERRED_SIZE, 90, GroupLayout.PREFERRED_SIZE)
					.addGap(20)
					.addComponent(button_2, GroupLayout.PREFERRED_SIZE, 90, GroupLayout.PREFERRED_SIZE)
                    )
					)
					);

					groupLayout.setVerticalGroup(
					groupLayout.createSequentialGroup()
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(label_1)
                    // هنا قمنا بجعل طول مربع النص الأول يساوي 25 بيكسل
                    .addComponent(textField_1, GroupLayout.PREFERRED_SIZE, 25, GroupLayout.PREFERRED_SIZE)
					)
					// هنا قمنا بإضافة هامش بنسبة 12 بيكسل على أسفل المجموعة الأولى عامودياً أي تحت السطر الأول
					.addGap(12)
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(label_2)
                    // هنا قمنا بجعل طول مربع النص الثاني يساوي 25 بيكسل
                    .addComponent(textField_2, GroupLayout.PREFERRED_SIZE, 25, GroupLayout.PREFERRED_SIZE)
					)
					// هنا قمنا بإضافة هامش بنسبة 12 بيكسل على أسفل المجموعة الثاني عامودياً أي تحت السطر الثاني
					.addGap(12)
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    // هنا قمنا بجعل طول الأزرار يساوي 30 بيكسل
                    .addComponent(button_1, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE)
                    .addComponent(button_2, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE)
					)
					);

					frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					frame.pack();
					frame.setVisible(true);

					}

					}
				  

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

طريقة تحديد حجم الأشياء التي تضيفها في ال JFrame و حجم الفراغات بينهم عند إستخدام الكلاس GroupLayout في جافا

  جعل حجم الأشياء التي تضيفها في الـ JFrame يتغير بشكل تلقائي عند تكبير أو تصغير النافذة عند إستخدام الكلاس GroupLayout

المثال التالي يعلمك طريقة جعل حجم الأشياء التي تضيفها في الـ Frame يتغير بشكل تلقائي عند تكبير أو تصغير النافذة عند إستخدام الكلاس GroupLayout.
أي ستتعلم كيف تجعل محتوى النافذة Resizable.

ملاحظة: هذا نفس المثال الرابع مع تعديل الأحجام فقط, لهذا ستجد أننا شرحنا فقط أكواد تعديل الأحجام التي أضفناه على المثال الرابع.


مثال طريقة جعل حجم الأشياء التي تضيفها في الـ Frame يتغير بشكل تلقائي عند تكبير أو تصغير النافذة عند إستخدام الكلاس GroupLayout.

Main.java
					import javax.swing.JFrame;
					import javax.swing.JTextField;
					import javax.swing.JLabel;
					import javax.swing.JButton;
					import javax.swing.GroupLayout;
					import javax.swing.LayoutStyle;
					import java.awt.Container;

					public class Main {

					public static void main(String[] args) {

					JFrame frame = new JFrame("Login");

					Container container = frame.getContentPane();
					GroupLayout groupLayout = new GroupLayout(container);
					container.setLayout(groupLayout);

					groupLayout.setAutoCreateContainerGaps(true);
					groupLayout.preferredLayoutSize(container);

					JLabel label_1 = new JLabel("User");
					JLabel label_2 = new JLabel("Password");
					JTextField textField_1 = new JTextField();
					JTextField textField_2 = new JTextField();
					JButton button_1 = new JButton("Register");
					JButton button_2 = new JButton("Login");

					groupLayout.setHorizontalGroup(
					groupLayout.createSequentialGroup()
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addComponent(label_1)
                    .addComponent(label_2)
					)
					// هنا قمنا بإضافة هامش بين 0 و 20 بيكسل على يمين المجموعة الأولى أفقياً
					// يتم تحديده بشكل تلقائي عند التلاعب بحجم النافذة
					.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED,GroupLayout.DEFAULT_SIZE, 20)
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    // هنا قمنا بجعل عرض مربعات النصوص يزيد أو يقل بشكل تلقائي عند التلاعب بحجم النافذة
                    .addComponent(textField_1, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(textField_2, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

                    .addGroup(groupLayout.createSequentialGroup()
					// هنا قمنا بجعل عرض الأزرار يزيد أو يقل بشكل تلقائي عند التلاعب بحجم النافذة
					// و أضفنا هامش بين 0 و 20 بيكسل بين الأزرار
					// يتم تحديده بشكل تلقائي عند التلاعب بحجم النافذة
					.addComponent(button_1, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
					.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED,GroupLayout.DEFAULT_SIZE, 20)
					.addComponent(button_2, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    )
					)
					);

					groupLayout.setVerticalGroup(
					groupLayout.createSequentialGroup()
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(label_1)
                    .addComponent(textField_1)
					)
					// هنا قمنا بإضافة هامش بين 0 و 20 بيكسل على يمين المجموعة الأولى أفقياً
					// يتم تحديده بشكل تلقائي عند التلاعب بحجم النافذة
					.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED,GroupLayout.DEFAULT_SIZE, 20)
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(label_2)
                    .addComponent(textField_2)
					)
					// هنا قمنا بإضافة هامش بين 0 و 20 بيكسل على يمين المجموعة الأولى أفقياً
					// يتم تحديده بشكل تلقائي عند التلاعب بحجم النافذة
					.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED,GroupLayout.DEFAULT_SIZE, 20)
					.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(button_1)
                    .addComponent(button_2)
					)
					);

					frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					frame.pack();
					frame.setVisible(true);

					}

					}
				  

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

قم بتكبير و تصغير حجم النافذة و لاحظ كيف سيتم تغير أحجام الأشياء الموجودة فيها بشكل تلقائي.

طريقة جعل حجم الأشياء التي تضيفها في ال JFrame يتغير بشكل تلقائي عند تكبير أو تصغير النافذة عند إستخدام الكلاس GroupLayout في جافا

  تعلم Java Swing 

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