Swingطريقة إستخدام أكثر من Layout Manager لترتيب محتوى الـ JFrame
المثال التالي يعلمك طريقة ترتيب محتوى الـ Frame بإستخدام أكثر من Layout Manager.
- الزر Next يعرض الـ Panel التالية في الـ Panel اليمنى.
- الزر Previous يعرض الـ Panel السابقة في الـ Panel اليمنى.
- الزر First يعرض أول Panel تم إضافتها في الـ Panel اليمنى.
- الزر Last يعرض آخر Panel تم إضافتها في الـ Panel اليمنى.
سنقوم بتقسيم الـ Frame كما في الصورة التالية.
مثال
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);
}
}
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 اليمنى.