Swing - الكلاس JTabbedPane
الكلاس JTabbedPane
يستخدم لإضافة (Tabbed Pane) في واجهة المستخدم.
الـ Tabbed Pane تستخدم لوضع عدة Panels في مكان واحد مع إمكانية إظهار Panel واحد منهم في وقت واحد.
كل Panel توضع بداخل الـ Tabbed Pane تملك Tab خاص فيها.
عندما يقوم المستخدم بالنقر على الـ Tab فإنها تظهر الـ Panel التي بداخلها.
إفتراضياً, الـ Tabbed Pane يظهر حدود عند إضافته في النافذة. و يمكنك وضع العدد الذي تريده من الـ Panels بداخله.
بنا - الكلاس JTabbedPane
public class JTabbedPane extends JComponent implements Serializable, Accessible, SwingConstan
طريقة التعامل مع - الكلاس JTabbedPane
لإضافة Panel في الـ Tabbed Pane نستخدم الدالة addTab()
أو الدالة insertTab()
.
كل Panel تضيفه في الـ Tabbed Pane يتم إعطائه رقم Index بشكل تلقائي.
الـ Panel الأول يحمل الـ Index رقم 0.
الـ Panel الثاني يحمل الـ Index رقم 1 إلخ..
لإظهار Panel محدد من الـ Panels الموجودين إستخدام الدالة setSelectedComponent()
أو الدالة setSelectedIndex()
.
ملاحظة الكلاس JTabbedPane
محتوى الـ Tab ليس بالضرورة أن يكون Panel.
يمكن أن يكون أي شيء مثل Label, Button, Text Box إلخ..
لكنك على الأغلب ستجعل كل Tab يظهر Panel و تضع المحتوى الذي تريده بداخلها.
كونستركتورات الكلاس JTabbedPane
الجدول التالي يحتوي على جميع الكونستركتورات الموجودة في الكلاس JTabbedPane
.
الكونستركتور مع تعريفه | |
---|---|
public JTabbedPane()
ينشئ كائن من الكلاس JTabbedPane يمثل Tabbed Pane فارغ يظهر الـ Tabs التي نضيفها فيه في الأعلى.سبب ظهور الـ Tabs في الأعلى هو أن الـ Tabbed Pane يستخدم إفتراضياً الثابت JTabbedPane.TOP لتحديد مكان ظهورهم. |
|
public JTabbedPane(int tabPlacement)
ينشئ كائن من الكلاس JTabbedPane يمثل Tabbed Pane فارغ يظهر الـ Tabs التي نضيفها فيه في المكان الذي نريده.مكان الباراميتر tabPlacement نضع إحدى الثوابت التالية:
يرمي الإستثناء IllegalArgumentException في حال لم يتم تحديد الـ tabPlacement |
public JTabbedPane(int tabPlacement, int tabLayoutPolicy)
ينشئ كائن من الكلاس JTabbedPane
يمثل Tabbed Pane فارغ يظهر الـ Tabs التي نضيفها فيه في المكان الذي نريده.كما أنه يحدد إذا كان سيتم إضافة Scroll Bar في حال كانت مساحة الـ Tabbed Pane غير كافية لإظهار جميع الـ Tabs وراء بعضهم. أو لتحديد إذا كان سيضعهم فوق بعضهم كما يفعل إفتراضياً,
مكان الباراميتر
tabPlacement
نضع إحدى الثوابت التالية:JTabbedPane.TOP
: يجعل الـ Tabs يظهرون في أعلا الـ Tabbed Pane.JTabbedPane.BOTTOM
: يجعل الـ Tabs يظهرون في أسفل الـ Tabbed Pane.JTabbedPane.RIGHT
: يجعل الـ Tabs يظهرون في يمين الـ Tabbed Pane.JTabbedPane.LEFT
: يجعل الـ Tabs يظهرون في يسار الـ Tabbed Pane.
مكان الباراميتر
tabLayoutPolicy
نضع إحدى الثوابت التالية:JTabbedPane.WRAP_TAB_LAYOUT
: يجعل الـ Tabs يظهرون فوق بعضهم البعض في حال كانت مساحة الـ Tabbed Pane غير كافية لإظهار جميع الـ Tabs وراء بعضهم.JTabbedPane.SCROLL_TAB_LAYOUT
: يضيف Scroll Bar خاص للإنتقال بين الـ Tabs في حال كانت مساحة الـ Tabbed Pane غير كافية لإظهار جميع الـ Tabs وراء بعضهم.
يرمي الإستثناء IllegalArgumentException في حال لم يتم تحديد الـ
tabPlacement
أو الـ tabLayoutPolicy
بواسطة الثوابت المخصصة لذلك.
طريقة إنشاء JTabbedPane
و إضافة Panels بداخله و إضافته في النافذة
المثال التالي يعلمك طريقة إنشاء كائن من الكلاس JTabbedPane
و إضافة Panels بداخله. ثم إضافته في النافذة.
مثال يشرح طريقة إنشاء كائن من الكلاس JTabbedPane
و إضافة Panels بداخله. ثم إضافته في النافذة.
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTabbedPane; import java.awt.Color; public class Main { public static void main(String[] args) { // هنا قمنا بإنشاء النافذة مع تحديد بعض خصائصها JFrame frame = new JFrame("JTabbedPane demo"); // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس frame.setSize(320, 300); // هنا قمنا بتحديد حجم النافذة. عرضها 320 و طولها 300 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج frame.setLayout(null); // في النافذة بنفسنا Tabbed Pane لذلك سنقوم بتحديد مكان الـ Layout Manager أي لم نستخدم أي null هنا وضعنا // Panels هنا قمنا بتعريف ثلاثة JPanel panel_1 = new JPanel(); JPanel panel_2 = new JPanel(); JPanel panel_3 = new JPanel(); // منهم Panel هنا قمنا بإعطاء لون خلفية لكل panel_1.setBackground(Color.white); panel_2.setBackground(Color.cyan); panel_3.setBackground(Color.yellow); // Frame مع تحديد موقعه و حجمه في الـ Tabbed Pane هنا قمنا بتعريف JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.setBounds(50, 30, 200, 200); // منهم فيه Panel مع تحديد عنوان كل Tabbed Pane في الـ Panels هنا وضعنا الثلاثة tabbedPane.addTab("Tab 1", panel_1); tabbedPane.addTab("Tab 2", panel_2); tabbedPane.addTab("Tab 3", panel_3); // Frame في الـ Tabbed Pane هنا أضفنا الـ frame.add(tabbedPane); // مرئية Frame هنا جعلنا الـ frame.setVisible(true); } }
•ستظهر لك النافذة التالية عند التشغيل.
إظهار الـ Tabs فوق بعضهم
المثال التالي يوضح طريقة ظهور الـ Tabs في حال لم يتم تغيير الـ Tab Layout Policy و كانت مساحة الـ Tabbed Pane غير كافية لإظهار جميع الـ Tabs وراء بعضهم.
مثال طريقة ظهور الـ Tabs في حال لم يتم تغيير الـ Tab Layout Policy و كانت مساحة الـ Tabbed Pane غير كافية لإظهار جميع الـ Tabs وراء بعضهم.
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTabbedPane; import java.awt.Color; public class Main { public static void main(String[] args) { // هنا قمنا بإنشاء النافذة مع تحديد بعض خصائصها JFrame frame = new JFrame("JTabbedPane demo"); // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس frame.setSize(320, 300); // هنا قمنا بتحديد حجم النافذة. عرضها 320 و طولها 300 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج frame.setLayout(null); // في النافذة بنفسنا Tabbed Pane لذلك سنقوم بتحديد مكان الـ Layout Manager أي لم نستخدم أي null هنا وضعنا // Panels هنا قمنا بتعريف خمسة JPanel panel_1 = new JPanel(); JPanel panel_2 = new JPanel(); JPanel panel_3 = new JPanel(); JPanel panel_4 = new JPanel(); JPanel panel_5 = new JPanel(); // منهم Panel هنا قمنا بإعطاء لون خلفية لكل panel_1.setBackground(Color.white); panel_2.setBackground(Color.cyan); panel_3.setBackground(Color.yellow); panel_4.setBackground(Color.green); panel_5.setBackground(Color.red); // Frame مع تحديد موقعه و حجمه في الـ Tabbed Pane هنا قمنا بتعريف JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.setBounds(50, 30, 200, 200); // منهم فيه Panel مع تحديد عنوان كل Tabbed Pane في الـ Panels هنا وضعنا جميع الـ tabbedPane.addTab("Tab 1", panel_1); tabbedPane.addTab("Tab 2", panel_2); tabbedPane.addTab("Tab 3", panel_3); tabbedPane.addTab("Tab 4", panel_4); tabbedPane.addTab("Tab 5", panel_5); // Frame في الـ Tabbed Pane هنا أضفنا الـ frame.add(tabbedPane); // مرئية Frame هنا جعلنا الـ frame.setVisible(true); } }
•ستظهر لك النافذة التالية عند التشغيل.
طريقة إظهار Scroll Bar في حال كانت مساحة الـ JTabbedPane
غير كافية لإظهار جميع الـ Tabs وراء بعضهم
المثال التالي يعلمك طريقة إظهار Scroll Bar في حال كانت مساحة الـ JTabbedPane
غير كافية لإظهار جميع الـ Tabs وراء بعضهم.
مثال يعلمك طريقة إظهار Scroll Bar في حال كانت مساحة الـ JTabbedPane
غير كافية لإظهار جميع الـ Tabs وراء بعضهم
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTabbedPane; import java.awt.Color; public class Main { public static void main(String[] args) { // هنا قمنا بإنشاء النافذة مع تحديد بعض خصائصها JFrame frame = new JFrame("JTabbedPane demo"); // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس frame.setSize(320, 300); // هنا قمنا بتحديد حجم النافذة. عرضها 320 و طولها 300 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج frame.setLayout(null); // في النافذة بنفسنا Tabbed Pane لذلك سنقوم بتحديد مكان الـ Layout Manager أي لم نستخدم أي null هنا وضعنا // Panels هنا قمنا بتعريف خمسة JPanel panel_1 = new JPanel(); JPanel panel_2 = new JPanel(); JPanel panel_3 = new JPanel(); JPanel panel_4 = new JPanel(); JPanel panel_5 = new JPanel(); // منهم Panel هنا قمنا بإعطاء لون خلفية لكل panel_1.setBackground(Color.white); panel_2.setBackground(Color.cyan); panel_3.setBackground(Color.yellow); panel_4.setBackground(Color.green); panel_5.setBackground(Color.red); // عند الحاجة Scroll Bar و جعله يضيف Tabs و تحديد مكان ظهور الـ Frame مع تحديد موقعه و حجمه في الـ Tabbed Pane هنا قمنا بتعريف JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT); tabbedPane.setBounds(50, 30, 200, 200); // منهم فيه Panel مع تحديد عنوان كل Tabbed Pane في الـ Panels هنا وضعنا جميع الـ tabbedPane.addTab("Tab 1", panel_1); tabbedPane.addTab("Tab 2", panel_2); tabbedPane.addTab("Tab 3", panel_3); tabbedPane.addTab("Tab 4", panel_4); tabbedPane.addTab("Tab 5", panel_5); // Frame في الـ Tabbed Pane هنا أضفنا الـ frame.add(tabbedPane); // مرئية Frame هنا جعلنا الـ frame.setVisible(true); } }
•ستظهر لك النافذة التالية عند التشغيل.
طريقة إظهار الـ Tabs في أسفل الـ JTabbedPane
المثال التالي يعلمك طريقة إظهار الـ Tabs في أسفل الـ Tabbed Pane و إضافة Scroll Bar في حال كانت مساحة الـ Tabbed Pane غير كافية لإظهار جميع الـ Tabs وراء بعضهم.
مثال طريقة إظهار الـ Tabs في أسفل الـ Tabbed Pane .
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTabbedPane; import java.awt.Color; public class Main { public static void main(String[] args) { // هنا قمنا بإنشاء النافذة مع تحديد بعض خصائصها JFrame frame = new JFrame("JTabbedPane demo"); // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس frame.setSize(320, 300); // هنا قمنا بتحديد حجم النافذة. عرضها 320 و طولها 300 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج frame.setLayout(null); // في النافذة بنفسنا Tabbed Pane لذلك سنقوم بتحديد مكان الـ Layout Manager أي لم نستخدم أي null هنا وضعنا // Panels هنا قمنا بتعريف خمسة JPanel panel_1 = new JPanel(); JPanel panel_2 = new JPanel(); JPanel panel_3 = new JPanel(); JPanel panel_4 = new JPanel(); JPanel panel_5 = new JPanel(); // منهم Panel هنا قمنا بإعطاء لون خلفية لكل panel_1.setBackground(Color.white); panel_2.setBackground(Color.cyan); panel_3.setBackground(Color.yellow); panel_4.setBackground(Color.green); panel_5.setBackground(Color.red); // عند الحاجة Scroll Bar و جعله يضيف Tabs و تحديد مكان ظهور الـ Frame مع تحديد موقعه و حجمه في الـ Tabbed Pane هنا قمنا بتعريف JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.BOTTOM, JTabbedPane.SCROLL_TAB_LAYOUT); tabbedPane.setBounds(50, 30, 200, 200); // منهم فيه Panel مع تحديد عنوان كل Tabbed Pane في الـ Panels هنا وضعنا جميع الـ tabbedPane.addTab("Tab 1", panel_1); tabbedPane.addTab("Tab 2", panel_2); tabbedPane.addTab("Tab 3", panel_3); tabbedPane.addTab("Tab 4", panel_4); tabbedPane.addTab("Tab 5", panel_5); // Frame في الـ Tabbed Pane هنا أضفنا الـ frame.add(tabbedPane); // مرئية Frame هنا جعلنا الـ frame.setVisible(true); } }
•ستظهر لك النافذة التالية عند التشغيل.
طريقة إضافة زر إغلاق لكل Tab في الـ JTabbedPane
المثال التالي يعلمك طريقة إضافة زر إغلاق لكل Tab يتم إضافتها في الـ Tabbed Pane.
سنقوم ببناء كلاس خاص لإضافة زر إغلاق لكل Tab موجود بداخل الـ Tabbed Pane.
مثال يشرح لك يعلمك طريقة إضافة زر إغلاق لكل Tab يتم إضافتها في الـ Tabbed Pane.
import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.plaf.basic.BasicButtonUI; public class SpecialTab extends JPanel { private final JTabbedPane tabbedPane; public SpecialTab(final JTabbedPane tabbedPane) { // تترب من اليسار لليمين و أزلنا أي هوامش لا حاجة لها Tab هنا جعلنا الأشياء التي ستظهر في الـ super(new FlowLayout(FlowLayout.LEFT, 0, 0)); // فارغاً tabbedPane سيتم رمي إستثناء في حال كان الـ if (tabbedPane == null) { throw new NullPointerException("TabbedPane is null"); } this.tabbedPane = tabbedPane; // مفتوح Tab هنا قمنا بتحسين لون الخلفية الذي يظهر على الـ setOpaque(false); // label و تحويله إلى Panel هنا سيتم قراءة عنوان الـ JLabel label = new JLabel() { @Override public String getText() { int i = tabbedPane.indexOfTabComponent(SpecialTab.this); if (i != -1) return tabbedPane.getTitleAt(i); return null; } }; // Tab في الـ label بعدها سيتم وضع الـ add(label); // 5px بعدها سيتم إزالة أي حدود موضوعة له و إضافة هامش بنسبة label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); // بعدها سيتم تعريف زر الخروج الذي سيظهر بجانب العنوان JButton button = new CloseButton(); add(button); // هنا قمنا بإضافة بعض الهامش ناحية اليسار قبل زر الخروج setBorder(BorderFactory.createEmptyBorder(3, 0, 0, 0)); } private class CloseButton extends JButton implements ActionListener { public CloseButton() { int size = 15; setPreferredSize(new Dimension(size, size)); setText("×"); setForeground(Color.white); setToolTipText("close this tab"); setBackground(new Color(254, 46, 46)); setContentAreaFilled(true); setFocusable(false); setBorder(BorderFactory.createEtchedBorder()); setBorderPainted(true); setUI(new BasicButtonUI()); addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { int i = tabbedPane.indexOfTabComponent(SpecialTab.this); if (i != -1) tabbedPane.remove(i); } @Override public void updateUI() { } } }
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTabbedPane; import java.awt.Color; public class Main { public static void main(String[] args) { // هنا قمنا بإنشاء النافذة مع تحديد بعض خصائصها JFrame frame = new JFrame("JTabbedPane demo"); // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس frame.setSize(420, 300); // هنا قمنا بتحديد حجم النافذة. عرضها 420 و طولها 300 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج frame.setLayout(null); // في النافذة بنفسنا Tabbed Pane لذلك سنقوم بتحديد مكان الـ Layout Manager أي لم نستخدم أي null هنا وضعنا // Panels هنا قمنا بتعريف خمسة JPanel panel_1 = new JPanel(); JPanel panel_2 = new JPanel(); JPanel panel_3 = new JPanel(); JPanel panel_4 = new JPanel(); JPanel panel_5 = new JPanel(); // منهم Panel هنا قمنا بإعطاء لون خلفية لكل panel_1.setBackground(Color.white); panel_2.setBackground(Color.cyan); panel_3.setBackground(Color.yellow); panel_4.setBackground(Color.green); panel_5.setBackground(Color.red); // عند الحاجة Scroll Bar و جعله يضيف Tabs و تحديد مكان ظهور الـ Frame مع تحديد موقعه و حجمه في الـ Tabbed Pane هنا قمنا بتعريف JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT); tabbedPane.setBounds(50, 30, 300, 200); // منهم فيه Panel مع تحديد عنوان كل Tabbed Pane في الـ Panels هنا وضعنا جميع الـ tabbedPane.addTab("Tab 1", panel_1); tabbedPane.addTab("Tab 2", panel_2); tabbedPane.addTab("Tab 3", panel_3); tabbedPane.addTab("Tab 4", panel_4); tabbedPane.addTab("Tab 5", panel_5); // حتى يتم إضافة زر للخروج لكل واحد منهم SpecialTab إلى tabbedPane الموجودة بداخل الـ Tabs هنا أنشأنا حلقة تقوم بتحويل جميع الـ for(int i=0; i<tabbedPane.getTabCount(); i++) tabbedPane.setTabComponentAt(i, new SpecialTab(tabbedPane)); // Frame في الـ Tabbed Pane هنا أضفنا الـ frame.add(tabbedPane); // مرئية Frame هنا جعلنا الـ frame.setVisible(true); } }
•ستظهر لك النافذة التالية عند التشغيل.
تعلم Java Swing
أفضل كورس لتعلم Java swing من الصفر الى الاحتراف .