كورس java swing - الكلاس CardLayout

Swing - الكلاس CardLayout

الكلاس CardLayout يستخدم لترتيب الأشياء التي نضيفها فوق بعضها البعض بحيث يسمح لك بإظهار شيء واحد فقط في كل مرة.


بنا Swing - الكلاس CardLayout

public class CardLayout
extends Object
implements LayoutManager2, Serializable
	

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

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

الكونستركتور مع تعريفه
public GridLayout() يرتب الأشياء التي نضيفها فوق بعضها البعض بحيث يسمح بإظهار شيء واحد فقط في كل مرة.
public GridLayout(int hgap, int vgap) يرتب الأشياء التي نضيفها فوق بعضها البعض بحيث يسمح بإظهار شيء واحد فقط في كل مرة مع وضع مسافة فارغة بينهم.

  • مكان الباراميتر hgap نضع رقم يمثل حجم الفراغ أفقياً بين الأشياء التي نضيفها.

  • مكان الباراميتر vgap نضع رقم يمثل حجم الفراغ عامودياً بين الأشياء التي نضيفها.

دوال الكلاس CardLayout

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

الدالة مع تعريفها
public void next(Container parent) تستخدم لإظهار الشيء التالي الموضوع في محتوى النافذة أو الحاوية.
public void previous(Container parent) تستخدم لإظهار الشيء السابق الموضوع في النافذة أو الحاوية.
public void first(Container parent) تستخدم لإظهار أول شيء تم وضعه في النافذة أو الحاوية.
public void last(Container parent) تستخدم لإظهار آخر شيء تم وضعه في النافذة أو الحاوية.
public void show(Container parent, String name) تستخدم لإظهار الشيء الموضوع في النافذة أو الحاوية من خلال إسمه.

 أمثلة شاملة على الكلاس CardLayout

طريقة ترتيب محتوى الـ JFrame بواسطة الكلاس CardLayout

المثال التالي يعلمك طريقة ترتيب محتوى الـ Frame بواسطة الكلاس CardLayout.


مثال طريقة ترتيب محتوى الـ Frame بواسطة الكلاس CardLayout

Main.java
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.CardLayout;
 
public class Main {
 
    public static void main(String[] args) {
 
        JFrame frame = new JFrame("CardLayout demo");           // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس
        frame.setSize(300, 300);                                // هنا قمنا بتحديد حجم النافذة. عرضها 300 و طولها 300
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
        frame.setLayout(new CardLayout(20, 20));                // لترتيب الأشياء التي نضيفها بداخلها CardLayout هنا جعلنا النافذة تستخدم الـ
 
        // هنا قمنا بتعريف 3 أزرار
        JButton b1 = new JButton("1");
        JButton b2 = new JButton("2");
        JButton b3 = new JButton("3");
 
        // هنا قمنا بإضافة الأزرار في النافذة
        frame.add(b1);
        frame.add(b2);
        frame.add(b3);
 
        // هنا جعلنا النافذة مرئية
        frame.setVisible(true);
 
    }
 
}
		

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

لاحظ أن أول زر أضفته في النافذة هو الوحيد الذي ظهر لأن باقي الأزرار موجودة خلفه.

طريقة ترتيب محتوى ال JFrame بواسطة الكلاس CardLayout في جافا

  طريقة تقليب محتوى الـ JFrame عند إستخدام الـ CardLayout

المثال التالي يعلمك طريقة تقليب محتوى الـ Frame.
في كل مرة يتم فيها النقر على زر, سيتم عرض الزر التالي الذي أضيف بعده.


مثال طريقة تقليب محتوى الـ Frame .

في كل مرة يتم فيها النقر على زر, سيتم عرض الزر التالي الذي أضيف بعده. Main.java
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class Main {
 
    public static void main(String[] args) {
 
        JFrame frame = new JFrame("CardLayout demo");           // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس
        frame.setSize(300, 300);                                // هنا قمنا بتحديد حجم النافذة. عرضها 300 و طولها 300
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
 
        // لترتيب الأشياء التي نضيفها بداخلها CardLayout هنا جعلنا النافذة تستخدم الـ
        CardLayout card = new CardLayout(20, 20);
        Container container = frame.getContentPane();
        container.setLayout(card);
 
        // هنا قمنا بتعريف 3 أزرار
        JButton b1 = new JButton("1");
        JButton b2 = new JButton("2");
        JButton b3 = new JButton("3");
 
        // و الذي يمثل ما يحدث عن النقر على أي زر ActionListener هنا أنشأنا كائن من الكلاس
        ActionListener al = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // هنا قلنا أنه سيعرض الزر التالي
                card.next(container);
            }
        };
 
        // بجميع الأزرار al هنا ربطنا الكائن
        b1.addActionListener(al);
        b2.addActionListener(al);
        b3.addActionListener(al);
 
        // هنا قمنا بإضافة الأزرار في النافذة
        frame.add(b1);
        frame.add(b2);
        frame.add(b3);
 
        // هنا جعلنا النافذة مرئية
        frame.setVisible(true);
 
    }
 
}
		

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

كل زر تقوم بالنقر عليه, سيعرض مكانه الزر الذي يليه.

طريقة تقليب محتوى ال JFrame عند إستخدام ال CardLayout في جافا

 طريقة إستخدام أكثر من Layout Manager لترتيب محتوى الـ JFrame

المثال التالي يعلمك طريقة ترتيب محتوى الـ Frame بإستخدام أكثر من Layout Manager.

  • الزر Next يعرض الـ Panel التالية في الـ Panel اليمنى.

  • الزر Previous يعرض الـ Panel السابقة في الـ Panel اليمنى.

  • الزر First يعرض أول Panel تم إضافتها في الـ Panel اليمنى.

  • الزر Last يعرض آخر Panel تم إضافتها في الـ Panel اليمنى.


سنقوم بتقسيم الـ Frame كما في الصورة التالية.


مثال طريقة ترتيب محتوى الـ Frame بإستخدام أكثر من Layout Manager .

Main.java
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class Main {
 
    public static void main(String[] args) {
 
        JFrame frame = new JFrame("CardLayout demo");           // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس
        frame.setSize(400, 200);                                // هنا قمنا بتحديد حجم النافذة. عرضها 400 و طولها 200
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
        frame.setLayout(new GridBagLayout());                   // لترتيب الأشياء التي نضيفها بداخلها GridBagLayout هنا جعلنا النافذة تستخدم الـ
 
        // اليمنى Panel اليسرى و الـ Panel هنا قمنا بتعريف الـ
        JPanel panel_L = new JPanel();
        JPanel panel_R = new JPanel();
 
        // في النافذة panel_R و الـ panel_L لتحديد مكان و حجم الـ GridBagConstraints هنا قمنا بتعريف كائن من الكلاس
        GridBagConstraints gbc = new GridBagConstraints();
 
        // يتأثر بكامل المساحة المتوفرة من النافذة بالإتجاهين الأفقي و العامودي gbc هنا جعلنا الـ
        gbc.fill = GridBagConstraints.BOTH;
 
        // هنا جعلنا نسبة الجذب الأفقية و العامودية متساوي حتى يكون المحتوى دائماً مطابق لحجم الشاشة
        gbc.weightx = 1;
        gbc.weighty = 1;
 
        // في يسار النافذة panel_L هنا أضفنا الـ
        frame.add(panel_L, gbc);
 
        // في يمين النافذة مع إعطائها حجم جذب أكبر بعشر مرات panel_R هنا أضفنا الـ
        gbc.weightx = 10;
        frame.add(panel_R, gbc);
 
        // إلى 4 أقسام بالطول panel_L هنا قمنا بتقسيم الـ
        panel_L.setLayout(new GridLayout(4, 1));
 
        // هنا قمنا بتعريف 4 أزرار
        JButton next = new JButton("Next");
        JButton previous = new JButton("Previous");
        JButton first = new JButton("First");
        JButton last = new JButton("Last");
 
        // panel_L هنا قمنا بإضافة الأزرار في الـ
        panel_L.add(next);
        panel_L.add(previous);
        panel_L.add(first);
        panel_L.add(last);
 
        // // لترتيب الأشياء التي نضيفها بداخلها فوق بعضها البعض CardLayout تستخدم الـ panel_R هنا جعلنا الـ
        CardLayout card = new CardLayout();
        Container container = panel_R;
        container.setLayout(card);
 
        // Panels هنا قمنا بتعريف 4
        JPanel p1 = new JPanel();
        JPanel p2 = new JPanel();
        JPanel p3 = new JPanel();
        JPanel p4 = new JPanel();
 
        // منهم Panel هنا قمنا بإعطاء لون خلفية مختلف لكل
        p1.setBackground(Color.white);
        p2.setBackground(Color.yellow);
        p3.setBackground(Color.cyan);
        p4.setBackground(Color.green);
 
        // منهم Panel هنا قمنا بإضافة عنوان في كل
        p1.add(new JLabel("Panel 1"));
        p2.add(new JLabel("Panel 2"));
        p3.add(new JLabel("Panel 3"));
        p4.add(new JLabel("Panel 4"));
 
        // panel_R الأربعة في الـ Panels هنا قمنا بإضافة الـ
        panel_R.add(p1);
        panel_R.add(p2);
        panel_R.add(p3);
        panel_R.add(p4);
 
        // التالية Panel سيتم عرض الـ next هنا قلنا أنه عند النقر على الزر
        next.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                card.next(container);
            }
        });
 
        // السابقة Panel سيتم عرض الـ previous هنا قلنا أنه عند النقر على الزر
        previous.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                card.previous(container);
            }
        });
 
        // panel_R قمنا بإضافتها في الـ Panel سيتم عرض أول first هنا قلنا أنه عند النقر على الزر
        first.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                card.first(container);
            }
        });
 
        // panel_R قمنا بإضافتها في الـ Panel سيتم عرض آخر last هنا قلنا أنه عند النقر على الزر
        last.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                card.last(container);
            }
        });
 
        // هنا جعلنا النافذة مرئية
        frame.setVisible(true);
 
    }
 
}
		

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

كل زر تقوم بالنقر عليه, سيعرض Panel أخرى في الـ Panel اليمنى.

طريقة ترتيب محتوى ال JFrame بإستخدام أكثر من Layout Manager في جافا

كورس  تعلم Java Swing 

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