Swing - الكلاس JList

Java Swing الكلاس JList

مقدمة الكلاس JList 

الكلاس JList يستخدم لإضافة قائمة (List) في واجهة المستخدم.

عند التعامل مع الـ List فأنت لا تضع فيها العناصر مباشرةً. بل تضع العناصر في الـ Model الخاصة بها.
إذاً سيكون عليك إنشاء كائن من الكلاس DefaultListModel و وضعه كـ Model لكائن الـ JList.
بعدها يمكنك إضافة العدد الذي تريده من العناصر في كائن الـ DefaultListModel و التي ستظهر بدورها في الـ List.

يمكنك أيضاً تحديد طريقة عرض العناصر بداخل القائمة, يمكنك جعلها تظهر أفقياً أو عامودياً.
و يمكنك وضعها بداخل JScrollPane لجعلها تظهر Scroll Bar عند الحاجة.

لا تقلق ستفهم كل شيء من الأمثلة.


بناؤه

public class JList<E>
extends JComponent
implements Scrollable, Accessible 
	

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

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

الكونستركتور مع تعريفه
public JList() ينشئ كائن من الكلاس JList يمثل List فارغة, أي لا تحتوي أي عنصر.
public JList(E[] listData) ينشئ كائن من الكلاس JList يمثل List فيها خيارات جاهزة.
مكان الباراميتر listData نمرر مصفوفة من أي نوع.
عناصر هذه المصفوفة هي التي ستظهر كخيارات في القائمة.

قد يرمي إستثناء في حال كانت المصفوفة listData فارغة, أي قيمها تساوي null.
public JList(ListModel<E> dataModel) ينشئ كائن من الكلاس JList يمثل List فيها خيارات جاهزة.
مكان الباراميتر dataModel نمرر كائن من الكلاس ListModel.
عناصر الكائن dataModel هي التي ستظهر كخيارات في القائمة.

يرمي الإستثناء IllegalArgumentException في حال كان كائن الـ dataModel فارغاً, أي قيمته تساوي null.

دوال الكلاس JList

الجدول التالي يحتوي على بعض دوال الكلاس JList.

الدالة مع تعريفها
public void addListSelectionListener(ListSelectionListener listener) تستخدم لتنفيذ أوامر معينة عند النقر على أي خيار موجود في كائن الـ JList الذي قام بإستدعائها.
مكان الباراميتر listener نضع كائن من الكلاس ActionListener و نفعل بداخله Override لدالة إسمها actionPerformed(ActionEvent ae).
public E getSelectedValue() ترجع قيمة العنصر الذي قام المستخدم باختياره في كائن الـ JList الذي قام بإستدعائها.
في حال قام المستخدم باختيار أكثر من عنصر, فإنها ترجع قيمة العنصر الذي يملك أصغر index بينهم.
في حال لم يقم المستخدم باختيار أي عنصر, فإنها ترجع القيمة null.
public int getSelectedIndex() ترجع رقم يمثل index العنصر الذي قام المستخدم باختياره في كائن الـ JList الذي قام بإستدعائها.
في حال قام المستخدم باختيار أكثر من عنصر, ترجع index أصغر عنصر بينهم.
public int[] getSelectedIndices() ترجع مصفوفة أرقام, كل رقم فيها يمثل index عنصر من العناصر التي قام المستخدم باختيارها في كائن الـ JList الذي قام بإستدعائها.
public void setModel(ListModel<E> model) تستخدم لتحديد Model كائن الـ JList الذي قام بإستدعائها.
مكان الباراميتر model نضع كائن من الكلاس ListModel.

ترمي الإستثناء IllegalArgumentException في حال كان كائن الـ dataModel فارغاً, أي قيمته تساوي null.
public ListModel<E> getModel() ترجع نسخة من كائن الـ ListModel الذي يستخدمه كائن الـ JList الذي قام بإستدعائها.
public void setLayoutOrientation(int layoutOrientation) تستخدم لتحديد طريقة ظهور العناصر بداخل كائن الـ JList الذي قام بإستدعائها.
مكان الباراميتر layoutOrientation نضع إحدى الثوابت الموجودة في الكلاس ListModel المخصصة لتحديد طريقة ظهور العناصر بداخل كائن الـ JList.

الثوابت التي يسمح باستخدامها هي:
  • JList.VERTICAL.

  • JList.VERTICAL_WRAP.

  • JList.HORIZONTAL_WRAP.


إفتراضياً, الثابت الذي يستخدم هو JList.VERTICAL.

ترمي الإستثناء IllegalArgumentException في حال كان الثابت المستخدم غير مناسب للدالة.
public void setSelectionMode(int selectionMode) تستخدم لتحديد طريقة ظهور العناصر بداخل كائن الـ JList الذي قام بإستدعائها.
مكان الباراميتر layoutOrientation نضع إحدى الثوابت الموجودة في الكلاس ListSelectionModel المخصصة لتحديد طريقة ظهور العناصر بداخل كائن الـ JList.

الثوابت التي يسمح باستخدامها هي:
  • ListSelectionModel.SINGLE_SELECTION.

  • ListSelectionModel.SINGLE_INTERVAL_SELECTION.

  • ListSelectionModel.MULTIPLE_INTERVAL_SELECTION.


إفتراضياً, الثابت الذي يستخدم هو ListSelectionModel.MULTIPLE_INTERVAL_SELECTION.

ترمي الإستثناء IllegalArgumentException في حال كان الثابت المستخدم غير مناسب للدالة.

أمثلة شاملة الكلاس JList 

في جميع الأمثلة سنتعامل مع القائمة كالتالي:

  1. سنقوم بتعريف كائن من الكلاس JList و الذي بدوره يمثل القائمة التي ستظهر في واجهة المستخدم.

  2. سنقوم بتعريف كائن من الكلاس DefaultListModel و الذي سنستخدمه لتخزين العناصر التي ستظهر في القائمة.

  3. سنقوم بربط كائن الـ DefaultListModel بكائن الـ JList. هنا يمكن ربطهما بطريقتين:
    &nbsp &nbsp من خلال وضع كائن الـ DefaultListModel في كونستركتور كائن الـ JList.
    &nbsp &nbsp من خلال إستدعاء الدالة setModel() و تمرير كائن الـ DefaultListModel لها كـ Argument.

  4. سنقوم بتعريف كائن من الكلاس JScrollPane و نضع كائن الـ JList فيه, و بذلك نضمن ظهور Scroll Bar عند الحاجة.

  5. في الأخير, سنقوم بوضع كائن الـ JScrollPane في النافذة, و الذي بدوره أصبح يحتوي على القائمة و جميع العناصر التي فيها.



 طريقة إنشاء JList تحتوي على عناصر

المثال التالي يعلمك طريقة إنشاء كائن من الكلاس JList يحتوي على عناصر.


مثال إنشاء كائن من الكلاس JList يحتوي على عناصر.

Main.java
        import javax.swing.DefaultListModel;
        import javax.swing.JFrame;
        import javax.swing.JList;
        import javax.swing.JScrollPane;

        public class Main {

        public static void main(String[] args) {

        JFrame frame = new JFrame("JList demo");                  // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس
        frame.setSize(320, 360);                                  // هنا قمنا بتحديد حجم النافذة. عرضها 320 و طولها 360
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
        frame.setLayout(null);                                    // في النافذة بنفسنا List لذلك سنقوم بتحديد مكان الـ Layout Manager أي لم نستخدم أي null هنا وضعنا

        DefaultListModel model = new DefaultListModel();          // Model أي كأننا قمنا بتعريف .DefaultListModel هنا قمنا بإنشاء كائن من الكلاس
        JList list = new JList(model);                            // أي قمنا بتعريف القائمة .model مبنية على الكائن JList هنا قمنا بتعريف كائن من الكلاس
        JScrollPane listScrollPane = new JScrollPane(list);       // عند الحاجة Scroll Bar لضمان ظهور JScrollPane بداخل كائن من الكلاس list هنا وضعنا الـ

        listScrollPane.setBounds(100, 40, 100, 230);              // frame في الـ listScrollPane هنا قمنا بتحديد حجم و موقع الـ

        model.addElement("red");                                  // و التي بدورها ستظهر في القائمة model هنا أضفنا عدة عناصر في الـ
        model.addElement("blue");
        model.addElement("green");
        model.addElement("yellow");
        model.addElement("orange");
        model.addElement("brown");
        model.addElement("pink");
        model.addElement("purple");
        model.addElement("gray");
        model.addElement("black");
        model.addElement("white");

        frame.add(listScrollPane);                                // frame في الـ listScrollPane هنا أضفنا الـ

        frame.setVisible(true);                                   // هنا جعلنا النافذة مرئية

        }

        }
      

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

طريقة تعريف قائمة في جافا JList و إضافة عناصر فيها


 طريقة تغيير نوع و حجم و لون خط عناصر الـ JList

المثال التالي يعلمك طريقة تغيير نوع و حجم و لون خط عناصر كائن الـ JList.


مثال طريقة تغيير نوع و حجم و لون خط عناصر كائن الـ JList.

Main.java
                    import javax.swing.DefaultListModel;
                    import javax.swing.JFrame;
                    import javax.swing.JList;
                    import javax.swing.JScrollPane;

                    public class Main {

                    public static void main(String[] args) {

                    JFrame frame = new JFrame("JList demo");                  // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس
                    frame.setSize(320, 360);                                  // هنا قمنا بتحديد حجم النافذة. عرضها 320 و طولها 360
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
                    frame.setLayout(null);                                    // في النافذة بنفسنا List لذلك سنقوم بتحديد مكان الـ Layout Manager أي لم نستخدم أي null هنا وضعنا

                    DefaultListModel model = new DefaultListModel();          // Model أي كأننا قمنا بتعريف .DefaultListModel هنا قمنا بإنشاء كائن من الكلاس
                    JList list = new JList(model);                            // أي قمنا بتعريف القائمة .model مبنية على الكائن JList هنا قمنا بتعريف كائن من الكلاس
                    JScrollPane listScrollPane = new JScrollPane(list);       // عند الحاجة Scroll Bar لضمان ظهور JScrollPane بداخل كائن من الكلاس list هنا وضعنا الـ

                    listScrollPane.setBounds(100, 40, 100, 230);              // frame في الـ listScrollPane هنا قمنا بتحديد حجم و موقع الـ

                    Font newFont = new Font("Arial", Font.BOLD, 16);          // حجمه 16 Arial يمثل نوع خط عريض إسمه Font هنا أنشأنا كائن من الكلاس

                    list.setFont(newFont);                                    // newFont يستخدم الـ list هنا جعلنا الـ
                    list.setForeground(Color.cyan);                           // list هنا قمنا بتغير لون كلمات الـ
                    list.setBackground(Color.gray);                           // list هنا قمنا بتغير لون خلفية الـ

                    model.addElement("red");                                  // و التي بدورها ستظهر في القائمة model هنا أضفنا عدة عناصر في الـ
                    model.addElement("blue");
                    model.addElement("green");
                    model.addElement("yellow");
                    model.addElement("orange");
                    model.addElement("brown");
                    model.addElement("pink");
                    model.addElement("purple");
                    model.addElement("gray");
                    model.addElement("black");
                    model.addElement("white");

                    frame.add(listScrollPane);                                // frame في الـ listScrollPane هنا أضفنا الـ

                    frame.setVisible(true);                                   // هنا جعلنا النافذة مرئية

                    }

                    }
                  

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

طريقة تغيير نوع و حجم و لون خط عناصر كائن ال JList في جافا


 طريقة معرفة عدد و قيم العناصر التي قام المستخدم باختيارها في الـ JList

المثال التالي يعلمك طريقة معرفة عدد و قيم العناصر التي قام المستخدم باختيارها في كائن الـ JList.
هنا النتيجة تتغير مباشرةً أثناء إختيار العناصر من القائمة.


مثال يشرح طريقة معرفة عدد و قيم العناصر التي قام المستخدم باختيارها في كائن الـ JList.

Main.java
                    import javax.swing.DefaultListModel;
                    import javax.swing.JFrame;
                    import javax.swing.JList;
                    import javax.swing.JLabel;
                    import javax.swing.JScrollPane;
                    import javax.swing.event.ListSelectionEvent;
                    import javax.swing.event.ListSelectionListener;

                    public class Main {

                    // هنا قمنا بإنشاء النافذة و جميع الأشياء التي سنضعها فيها
                    static JFrame frame = new JFrame("JList demo");
                    static DefaultListModel model = new DefaultListModel();
                    static JList list = new JList( model );
                    static JScrollPane listScrollPane = new JScrollPane( list );
                    static JLabel totalSelected = new JLabel("Total Selected:");
                    static JLabel selectedItems = new JLabel("Selected Items:");

                    public static void main(String[] args) {

                    // frame هنا قمنا بتحديد أماكن الأشياء التي سنضيفها في الـ
                    listScrollPane.setBounds(20, 40, 100, 230);
                    totalSelected.setBounds(140, 40, 340, 30);
                    selectedItems.setBounds(140, 80, 340, 30);

                    // و التي بدورها ستظهر في القائمة model هنا أضفنا عدة عناصر في الـ
                    model.addElement("red");
                    model.addElement("blue");
                    model.addElement("green");
                    model.addElement("yellow");
                    model.addElement("orange");
                    model.addElement("brown");
                    model.addElement("pink");
                    model.addElement("purple");
                    model.addElement("gray");
                    model.addElement("black");
                    model.addElement("white");

                    // frame هنا قمنا بإضافة جميع الأشياء التي قمنا بتعريفها سابقاً في الـ
                    frame.add(listScrollPane);
                    frame.add(totalSelected);
                    frame.add(selectedItems);

                    // frame هنا قمنا بتحديد خصائص الـ
                    frame.setSize(550, 350);
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(null);
                    frame.setVisible(true);

                    // list هنا نضع الأوامر التي نريدها أن تتنفذ عند إختيار أي عنصر موجود في القائمة
                    list.addListSelectionListener(new ListSelectionListener() {
                    @Override
                    public void valueChanged(ListSelectionEvent e)
                    {
                    // سيتم عرض عدد العناصر التي قام المستخدم باختيارها و بالإضافة إلى قيمهم
                    totalSelected.setText("Total Selected: "+list.getSelectedIndices().length);
                    selectedItems.setText("Selected Items: "+list.getSelectedValuesList());
                    }
                    });

                    }

                    }
                  

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

لإختيار أكثر من عنصر, أبقي إصبعك على الزر Ctrl أثناء إختيار العناصر.

طريقة معرفة عدد و قيم العناصر التي قام المستخدم باختيارها في القائمة JList في جافا


طريقة معرفة عدد و قيم العناصر التي قام المستخدم باختيارها في الـ JList عند النقر زر

المثال التالي يعلمك طريقة معرفة عدد و قيم العناصر التي قام المستخدم باختيارها في كائن الـ JList عند النقر على كائن الـ JButton.


مثال يعلمك طريقة معرفة عدد و قيم العناصر التي قام المستخدم باختيارها في كائن الـ JList عند النقر على كائن الـ JButton.

Main.java
                    import java.awt.event.ActionEvent;
                    import java.awt.event.ActionListener;
                    import javax.swing.DefaultListModel;
                    import javax.swing.JFrame;
                    import javax.swing.JList;
                    import javax.swing.JLabel;
                    import javax.swing.JButton;
                    import javax.swing.JScrollPane;

                    public class Main {

                    // هنا قمنا بإنشاء النافذة و جميع الأشياء التي سنضعها فيها
                    static JFrame frame = new JFrame("JList demo");
                    static DefaultListModel model = new DefaultListModel();
                    static JList list = new JList( model );
                    static JScrollPane listScrollPane = new JScrollPane( list );
                    static JButton viewSelected = new JButton("View Selected");
                    static JLabel totalSelected = new JLabel();
                    static JLabel selectedItems = new JLabel();

                    public static void main(String[] args) {

                    // frame هنا قمنا بتحديد أماكن الأشياء التي سنضيفها في الـ
                    listScrollPane.setBounds(20, 40, 100, 230);
                    viewSelected.setBounds(140, 40, 150, 30);
                    totalSelected.setBounds(140, 80, 340, 30);
                    selectedItems.setBounds(140, 120, 340, 30);

                    // و التي بدورها ستظهر في القائمة model هنا أضفنا عدة عناصر في الـ
                    model.addElement("red");
                    model.addElement("blue");
                    model.addElement("green");
                    model.addElement("yellow");
                    model.addElement("orange");
                    model.addElement("brown");
                    model.addElement("pink");
                    model.addElement("purple");
                    model.addElement("gray");
                    model.addElement("black");
                    model.addElement("white");

                    // frame هنا قمنا بإضافة جميع الأشياء التي قمنا بتعريفها سابقاً في الـ
                    frame.add(listScrollPane);
                    frame.add(viewSelected);
                    frame.add(totalSelected);
                    frame.add(selectedItems);

                    // frame هنا قمنا بتحديد خصائص الـ
                    frame.setSize(550, 350);
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(null);
                    frame.setVisible(true);

                    // viewSelected هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ
                    viewSelected.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {
                    // سيتم عرض عدد العناصر التي قام المستخدم باختيارها و بالإضافة إلى قيمهم
                    totalSelected.setText("Total Selected: "+list.getSelectedIndices().length);
                    selectedItems.setText("Selected Items: "+list.getSelectedValuesList());
                    }
                    });

                    }

                    }
                  

ستظهر لك النافذة التالية عند التشغيل. قم بإختيار بعض العناصر ثم أنقر الزر لتظهر لك النتيجة.

لإختيار أكثر من عنصر, أبقي إصبعك على الزر Ctrl أثناء إختيار العناصر.

طريقة معرفة عدد و قيم العناصر التي قام المستخدم باختيارها في القائمة JList في جافا


 طريقة جعل المستخدم على إختيار قيمة واحدة من الـ JList

المثال التالي يعلمك طريقة إجبار المستخدم على إختيار قيمة واحدة من القيم الموجودة في كائن الـ JList.
كما أنك ستتعلم كيف تجلب القيم التي إختارها المستخدم من قائمتين عند النقر على كائن الـ JButton.


مثال يبين طريقة إجبار المستخدم على إختيار قيمة واحدة من القيم الموجودة في كائن الـ JList.

Main.java
                    import javax.swing.DefaultListModel;
                    import javax.swing.JList;
                    import javax.swing.JFrame;
                    import javax.swing.JLabel;
                    import javax.swing.JButton;
                    import javax.swing.JScrollPane;
                    import javax.swing.ListSelectionModel;
                    import java.awt.event.ActionEvent;
                    import java.awt.event.ActionListener;

                    public class Main {

                    // هنا قمنا بإنشاء النافذة و جميع الأشياء التي سنضعها فيها
                    static JFrame frame = new JFrame("JList demo");

                    // هنا قمنا بإنشاء العنوان الذي سنضعه فوق القائمة الأولى
                    static JLabel label_1 = new JLabel("Select Language");

                    // هنا قمنا بإنشاء القائمة الأولى
                    static DefaultListModel model_1 = new DefaultListModel();
                    static JList list_1 = new JList( model_1 );
                    static JScrollPane listScrollPane_1 = new JScrollPane( list_1 );

                    // هنا قمنا بإنشاء العنوان الذي سنضعه فوق القائمة الثانية
                    static JLabel label_2 = new JLabel("Select Level");

                    // هنا قمنا بإنشاء القائمة الثانية
                    static DefaultListModel model_2 = new DefaultListModel();
                    static JList list_2 = new JList( model_2 );
                    static JScrollPane listScrollPane_2 = new JScrollPane( list_2 );

                    // هنا قمنا بإنشاء الزر الموضوع تحت القائمتين و العناوين الذي سيظهر عند النقر على الزر/span>
                    static JButton btn = new JButton("View Selected");
                    static JLabel label_3 = new JLabel("", JLabel.CENTER);


                    public static void main(String[] args) {

                    // frame هنا قمنا بتحديد أماكن الأشياء التي سنضيفها في الـ
                    label_1.setBounds(50, 25, 100, 30);
                    listScrollPane_1.setBounds(50, 60, 100, 94);
                    label_2.setBounds(190, 25, 100, 30);
                    listScrollPane_2.setBounds(190, 60, 100, 94);
                    btn.setBounds(100, 200, 130, 30);
                    label_3.setBounds(0, 250, 350, 30);

                    // و التي بدورها ستظهر في القائمة الأولى model_1 هنا أضفنا عدة عناصر في الـ
                    model_1.addElement("java");
                    model_1.addElement("c");
                    model_1.addElement("c++");
                    model_1.addElement("c#");
                    model_1.addElement("vb");

                    // و التي بدورها ستظهر في القائمة الثانية model_2 هنا أضفنا عدة عناصر في الـ
                    model_2.addElement("101");
                    model_2.addElement("102");
                    model_2.addElement("103");

                    // هنا جعلنا أول قيمة في القائمة الأولى مختارة إفتراضياً بالإضافة إلى أن المستخدم لا يستطيع إختيار أكثر من قيمة منها في وقت واحد
                    list_1.setSelectedIndex(0);
                    list_1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

                    // هنا جعلنا أول قيمة في القائمة الثانية مختارة إفتراضياً بالإضافة إلى أن المستخدم لا يستطيع إختيار أكثر من قيمة منها في وقت واحد
                    list_2.setSelectedIndex(0);
                    list_2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

                    // frame هنا قمنا بإضافة جميع الأشياء التي قمنا بتعريفها سابقاً في الـ
                    frame.add(label_1);
                    frame.add(listScrollPane_1);
                    frame.add(label_2);
                    frame.add(listScrollPane_2);
                    frame.add(btn);
                    frame.add(label_3);

                    // frame هنا قمنا بتحديد خصائص الـ
                    frame.setSize(350, 350);
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(null);
                    frame.setVisible(true);

                    // btn هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ
                    btn.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {
                    // سيتم عرض القيم التي إختارها المستخدم أسفل الزر
                    label_3.setText("You select:   " + list_1.getSelectedValue() + " [ " + list_2.getSelectedValue() + " ]" );
                    }
                    });

                    }

                    }
                  

ستظهر لك النافذة التالية عند التشغيل. قم بإختيار أي عنصر من القائمتين ثم أنقر الزر لتظهر لك النتيجة.

لاحظ أيضاً أنه في كلا القائمتين لا يمكنك إختيار أكثر من عنصر.

طريقة معرفة قيم العناصر التي قام المستخدم باختيارها من قائميتن مختلفتين JList في جافا


 طريقة جعل المستخدم يضيف و يحذف قيم في JList

المثال التالي يعلمك طريقة جعل المستخدم يدخل قيم في كائن الـ JList, بالإضافة إلى جعله قادر على حذف القيم التي أدخلها.


مثال طريقة جعل المستخدم يدخل قيم في كائن الـ JList, بالإضافة إلى جعله قادر على حذف القيم التي أدخلها.

Main.java
                    import java.awt.event.ActionEvent;
                    import java.awt.event.ActionListener;
                    import javax.swing.JFrame;
                    import javax.swing.JList;
                    import javax.swing.DefaultListModel;
                    import javax.swing.JScrollPane;
                    import javax.swing.JLabel;
                    import javax.swing.JButton;
                    import javax.swing.JTextField;

                    public class Main {

                    // هنا قمنا بإنشاء النافذة و جميع الأشياء التي سنضعها فيها
                    static JFrame frame = new JFrame("JList demo");
                    static DefaultListModel model = new DefaultListModel();
                    static JList list = new JList( model );
                    static JLabel label = new JLabel("Enter Item");
                    static JScrollPane listScrollPane = new JScrollPane( list );
                    static JTextField textField = new JTextField();
                    static JButton addButton = new JButton("Add Item");
                    static JButton removeButton = new JButton("Remove");
                    static JButton removeAllButton = new JButton("Remove All");
                    static JLabel totalLabel = new JLabel("Total Items: 0");
                    static int itemsNumber = 0;


                    public static void main(String[] args) {

                    // frame هنا قمنا بتحديد أماكن الأشياء التي سنضيفها في الـ
                    label.setBounds(20, 80, 70, 30);
                    textField.setBounds(100, 80, 100, 30);
                    listScrollPane.setBounds(350, 40, 150, 180);
                    addButton.setBounds(220, 80, 100, 30);
                    removeButton.setBounds(220, 120, 100, 30);
                    removeAllButton.setBounds(220, 160, 100, 30);
                    totalLabel.setBounds(350, 230, 100, 30);

                    // frame هنا قمنا بإضافة جميع الأشياء التي قمنا بتعريفها سابقاً في الـ
                    frame.add(label);
                    frame.add(textField);
                    frame.add(addButton);
                    frame.add(removeButton);
                    frame.add(removeAllButton);
                    frame.add(listScrollPane);
                    frame.add(totalLabel);

                    // frame هنا قمنا بتحديد خصائص الـ
                    frame.setSize(550, 350);
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(null);
                    frame.setVisible(true);


                    // addButton هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ
                    addButton.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {
                    if( !textField.getText().equals("") )
                    {
                    // سيتم إضافة القيمة التي أدخلها المستخدم في مربع النص في القائمة و تحديث عدد العناصر
                    model.addElement( textField.getText() );
                    itemsNumber++;
                    totalLabel.setText( "Total Items: " + itemsNumber );
                    }
                    }
                    });


                    // removeButton هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ
                    removeButton.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {
                    // إذا كان المستخدم قد قام بتحديد عنصر واحد على الأقل من عناصر القائمة
                    if( list.getSelectedIndex() != -1 )
                    {
                    // كل عنصر تم تحديده فيها ليتم حذفه من خلاله index سيتم تخزين
                    int[] selectedIndices = list.getSelectedIndices();
                    for( int i=selectedIndices.length-1; i>=0; i-- )
                    {
                    model.removeElementAt( selectedIndices[i] );
                    itemsNumber--;
                    }
                    }
                    // سيتم تحديث عدد العناصر الموجودة في القائمة
                    totalLabel.setText( "Total Items: " + itemsNumber );
                    }
                    });


                    // removeAllButton هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ
                    removeAllButton.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {
                    // سيتم حذف جميع قيم القائمة و تصفير عدد العناصر الموجودة فيها
                    model.removeAllElements();
                    itemsNumber = 0;
                    totalLabel.setText( "Total Items: " + itemsNumber );
                    }
                    });


                    }

                    }
                  

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

ملاحظة لإلغاء أكثر من عنصر في نفس الوقت, أبق إصبعك على الزر Ctrl أثناء إختيار العناصر, بعدها أنقر على الزر Remove لإلغائهم.

طريقة جعل المستخدم يضيف و يحذف قيم في القائمة JList في جافا


 تغيير طريقة عرض العناصر بداخل الـ JList

المثال التالي يعلمك تغيير طريقة عرض العناصر بداخل كائن الـ JList.
هنا قمنا بوضع نفس كائن الـ DefaultListModel بداخل ثلاث كائنات من الكلاس JList لكننا قمنا بتغيير طريقة عرض العناصر في كل كائن منهم.


مثال يعلمك تغيير طريقة عرض العناصر بداخل كائن الـ JList.

Main.java
                    import javax.swing.DefaultListModel;
                    import javax.swing.JFrame;
                    import javax.swing.JList;
                    import javax.swing.JScrollPane;

                    public class Main {

                    public static void main(String[] args) {

                    // و تحديد خصائصها frame هنا قمنا بتحديد الـ
                    JFrame frame = new JFrame("JList demo");
                    frame.setSize(530, 280);
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(null);

                    // Model أي كأننا قمنا بتعريف .DefaultListModel هنا قمنا بإنشاء كائن من الكلاس
                    DefaultListModel model = new DefaultListModel();

                    // و التي بدورها ستظهر في كل قائمة تستخدمها model هنا أضفنا عدة عناصر في الـ
                    model.addElement("Mhamad");
                    model.addElement("Ahmad");
                    model.addElement("Salem");
                    model.addElement("Khaled");
                    model.addElement("Omar");
                    model.addElement("Said");
                    model.addElement("Moumen");
                    model.addElement("Moustafa");
                    model.addElement("Nidal");
                    model.addElement("Samir");
                    model.addElement("Mahmoud");
                    model.addElement("Rida");
                    model.addElement("Raja");
                    model.addElement("Ziad");
                    model.addElement("Fouad");
                    model.addElement("Mounir");
                    model.addElement("Wassim");
                    model.addElement("Mansour");
                    model.addElement("Majd");
                    model.addElement("Kassem");
                    model.addElement("Ali");
                    model.addElement("Yahya");
                    model.addElement("Jamal");

                    // Model أي ثلاث قوائم. و كلها مبنية تستخدم نفس الـ ,JList هنا قمنا بتعريف ثلاث كائنات من الكلاس
                    JList list_1 = new JList(model);
                    JList list_2 = new JList(model);
                    JList list_3 = new JList(model);

                    // هنا قمنا بتحديد طريقة ظهور العناصر بداخل كل قائمة
                    list_1.setLayoutOrientation(JList.VERTICAL);
                    list_2.setLayoutOrientation(JList.VERTICAL_WRAP);
                    list_3.setLayoutOrientation(JList.HORIZONTAL_WRAP);

                    // عند الحاجة Scroll Bar لضمان ظهور JScrollPane بداخل كائن من الكلاس هنا قمنا بوضع كل قائمة أنشأناها بداخل كائن من الكلاس
                    JScrollPane listScrollPane_1 = new JScrollPane(list_1);
                    JScrollPane listScrollPane_2 = new JScrollPane(list_2);
                    JScrollPane listScrollPane_3 = new JScrollPane(list_3);

                    // frame هنا قمنا بتحديد أماكن القوائم التي سنضيفها في الـ
                    listScrollPane_1.setBounds(40, 40, 100, 150);
                    listScrollPane_2.setBounds(200, 40, 120, 150);
                    listScrollPane_3.setBounds(360, 40, 120, 150);

                    // frame هنا قمنا بإضافة جميع القوائم التي قمنا بتعريفها سابقاً في الـ
                    frame.add(listScrollPane_1);
                    frame.add(listScrollPane_2);
                    frame.add(listScrollPane_3);

                    // هنا جعلنا النافذة مرئية
                    frame.setVisible(true);

                    }

                    }
                  

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

تغيير طريقة عرض العناصر بداخل القائمة في جافا JList