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

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

  • الزر Next يعرض الـ Panel التالية في الـ Panel اليمنى.
  • الزر Previous يعرض الـ Panel السابقة في الـ Panel اليمنى.
  • الزر First يعرض أول Panel تم إضافتها في الـ Panel اليمنى.
  • الزر Last يعرض آخر Panel تم إضافتها في الـ Panel اليمنى.

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


مثال

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 في جافا