package GUIAnwendungen.Layouts;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;

/* GridBagLayout:
 * -  يستخدم لترتيب الأشياء التي نضيفها كجدول يتألف من أسطر و أعمدة يمكن تعديل أحجامها و مكان ظهورها.
 * -  هنا يجب أن يتم ربط كل شيء يتم إضافته بكائن من الكلاس GridBagConstraints 
 */
public class GridBaglayout {

	public static void main(String[] args) {

		JFrame frame = new JFrame("GridBagLayout demo"); // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن
															// من الكلاس
		frame.setSize(300, 300); // هنا قمنا بتحديد حجم النافذة. عرضها 300 و طولها 300
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
		frame.setLayout(new GridBagLayout()); // لترتيب الأشياء التي نضيفها بداخلها GridBagLayout هنا جعلنا النافذة
												// تستخدم الـ

		// هنا قمنا بتعريف 10 أزرار
		JButton b1 = new JButton("1");
		JButton b2 = new JButton("2");
		JButton b3 = new JButton("3");
		JButton b4 = new JButton("4");
		JButton b5 = new JButton("5");
		JButton b6 = new JButton("6");
		JButton b7 = new JButton("7");
		JButton b8 = new JButton("8");
		JButton b9 = new JButton("9");
		JButton b10 = new JButton("10");

		// لتحديد مكان كل شيء بداخل النافذة GridBagConstraints هنا قمنا بتعريف كائن من
		// الكلاس
		GridBagConstraints gbc = new GridBagConstraints();

		// يتأثر بكامل المساحة المتوفرة من النافذة بالإتجاهين الأفقي و العامودي gbc هنا
		// جعلنا الـ
		gbc.fill = GridBagConstraints.BOTH;

		// هنا جعلنا نسبة الجذب الأفقية و العامودية متساوي حتى يكون المحتوى دائماً مطابق
		// لحجم الشاشة
		gbc.weightx = 1;
		gbc.weighty = 1;

		// هنا أضفنا أول ثلاث أزرار في أول سطر
		frame.add(b1, gbc);
		frame.add(b2, gbc);
		frame.add(b3, gbc);

		// هنا أضفنا الزر الرابع كآخر زر في السطر الأول
		gbc.gridwidth = GridBagConstraints.REMAINDER;
		frame.add(b4, gbc);

		// هنا أضفنا الزر الخامس لوحده و الذي بدوره سيظهر على سطر جديد و الذي سيكون
		// السطر الثاني هنا
		frame.add(b5, gbc);

		// هنا أضفنا الزر السادس نسبة للزر الخامس, أي سيوضع بعد الزر الخامس و على سطر
		// جديد و الذي سيكون السطر الثالث هنا
		gbc.gridwidth = GridBagConstraints.RELATIVE;
		frame.add(b6, gbc);

		// هنا أضفنا الزر السابع كآخر زر في نفس السطر الموجود فيه الزر السادس
		gbc.gridwidth = GridBagConstraints.REMAINDER;
		frame.add(b7, gbc);

		// هنا أضفنا الزر الثامن و الذي بدوره سيظهر على سطر جديد و الذي سيكون السطر
		// الرابع هنا
		gbc.gridwidth = 1;
		gbc.gridheight = 2; // هنا جعلناه طوله مضاعف, أي سيظهر أيضاً على السطر الخامس
		frame.add(b8, gbc);

		// هنا أضفنا الزر التاسع كآخر زر في نفس السطر الموجود فيه الزر الثامن
		gbc.gridwidth = GridBagConstraints.REMAINDER;
		gbc.gridheight = 1;
		frame.add(b9, gbc);

		// هنا أضفنا الزر العاشر كآخر زر في نفس السطر الموجود فيه الزر التاسع
		frame.add(b10, gbc);

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

	}

}
