إعلان
دورة تطوير التطبيقات باستخدام لغة JavaScript في هذه الدورة ستتعلم لغة جافا سكريبت, استخدام مكتبة React.js, بناء API الموقع بواسطة Node.js, تطوير تطبيق جوال باستخدام React Native, و في نهاية الدورة ستتعلم تطوير تطبيق محادثة شبيه بتطبيق WhatsApp. تعلم الآن
دورة تطوير واجهات المستخدم في هذه الدورة ستتعلم لغة HTML و لغة CSS و لغة JavaScript. من ناحية التطبيق العملي ستتعلم طريقة بناء واجهة متجر إلكتروني مكون من ست صفحات, تحويل خمسة تصاميم PSD إلى صفحات ويب, بناء واجهة مستخدم تشبه موقع يوتيوب, بناء لوحة تحكم إحترافية. تعلم الآن
تطوير تطبيقات باستخدام لغة بايثون في هذه الدورة ستتعلم أساسيات البرمجة بلغة بايثون وصولاً إلى التعامل مع أشهر أطر العمل (Flask و Django) و ستتعلم كيف تبني متجر إلكتروني يمكن للمستخدمين البيع و الشراء من خلاله. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة PHP في هذه الدورة ستتعلم لغة PHP من الصفر, استخدام إطار العمل Laravel بشرح مفصّل و عملي, كيفية تطوير شبكة اجتماعية تشبه Instagram, بناء API لتطبيق جوال وفق أسلوب RESTful, تطوير موقع إعلانات مبوبة, تطوير نظام إدارة محتوى CMS كامل. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة Ruby في هذه الدورة ستتعلم البرمجة بلغة Ruby إنطلاقاً من أبسط المفاهيم وحتى بناء تطبيق حقيقي, إستخدام إطار العمل Ruby on Rails بشرح مفصّل و عملي, بناء تطبيق حقيقي عبارة عن شبكة اجتماعية تشبه تويتر, تطوير مجتمع الكتروني يشبه حسوب I/O. تعلم الآن
دورة علوم الحاسوب هذه الدورة معدة لتكون مدخل لعلوم الحاسوب و لغات البرمجة حيث ستتعرف فيها على أنظمة التشغيل و ستتعمق في نظام لينكس و في كيفية التعامل معه من خلال موجه الأوامر, بالإضافة إلى قواعد البيانات و أساسيات الشبكات و الخوادم و مبادئ الحماية والأمان في الويب. تعلم الآن

    Swing طريقة إضافة زر إغلاق لكل Tab في الـ JTabbedPane

    المثال التالي يعلمك طريقة إضافة زر إغلاق لكل Tab يتم إضافتها في الـ Tabbed Pane.

    سنقوم ببناء كلاس خاص لإضافة زر إغلاق لكل Tab موجود بداخل الـ Tabbed Pane.


    مثال

    SpecialTab.java
    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() { }
     
        }
     
    }
    		

    Main.java
    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);
     
        }
     
    }
    		

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

    طريقة إضافة زر إغلاق لكل tab في جافا

    الدورات

    أدوات مساعدة

    الأقسام

    دورات
    مقالات أسئلة مشاريع كتب