کنترل JList

کنترل JList برای نمایش لیستی از آیتم ها که قابل انتخاب هستند استفاده می شود.این آیتم ها را می توانید به صورت تکی و گروهی انتخاب کنید. کنترل JList بهترین گزینه برای مواقعی است که شما می خواهید تعداد زیادی آیتم را در ستون های افقی و عمودی نمایش دهید. سازنده این کلاس به روش های زیر مقداردهی می شود :

public JList()
public JList(Object listData[])
public JList(Vector listData)
public JList(ListModel model)

برای آشنایی بیشتر با خاصیت ها و متدهای این کنترل به مثال زیر توجه کنید :

  1: import javax.swing.*;
  2: 
  3: public class FrameDemo 
  4: {
  5:     public static void main(String[] args) 
  6:     {
  7:         JFrame frame1 = new JFrame("JList Demo");   
  8:         JPanel Panel1 =  new JPanel();
  9:         JList List1 = new JList();
 10:         Panel1.add(List1);
 11:         frame1.add(Panel1); 
 12:                 
 13:         String[] items = { "Johnny", "Kenneth", "Mark", "Ralph", "Sussie"};
 14:         List1.setListData(items);
 15:                       
 16:         frame1.setSize(430 , 315);
 17:         frame1.setVisible(true);          
 18:     }   
 19: }

در کد بالا و در خطوط 11-7 سه کنترل Frame،Panel و JList ایجاد کرده ایم. حال نوبت به اضافه کردن آیتم ها به JList می رسد. در خط 13 یک آرایه رشته ای تعریف و آیتم ها را به آن اضافه می کنیم. در خط 14 این آرایه را به متد ()setListData ارسال می کنیم و این متد آیتم ها را به JList اضافه می کند. به جای خطوط 13 و 14 می توان از کد زیر استفاده کرد :

DefaultListModel DefaultListModel1 =new DefaultListModel(); 
DefaultListModel1.addElement("Johnny"); 
DefaultListModel1.addElement("Kenneth"); 
DefaultListModel1.addElement("Mark");
DefaultListModel1.addElement("Ralph");
DefaultListModel1.addElement("Sussie");

List1.setModel(DefaultListModel1);

DefaultListModel کلاسی است که دارای متدهایی برای حذف و اضافه و در کل دستکاری آیتم های JList می باشد. با استفاده از متد ()addElement آیتم ها را به یک شیء از کلاس مذکور اضافه و سپس این شیء را به متد ()setListData ارسال می کنیم. برنامه را اجرا و نتیجه را مشاهده کنید :
jlist-in-java-01
کلاس DefaultListModel دارای متد ()remove برای حذف یک آیتم می باشد این متد اندیس آیتمی را که می خواهید حذف کنید را دریافت می کند :

DefaultListModel1.remove(2);

برای حذف چند آیتم از JList هم می توان از متد ()removeRange که اندیس شروع و پایان آیتم هایی که پشت سر هم هستند و می خواهید حذف کنید را می گیرد :

DefaultListModel1.removeRange(2,4);

در حالت پیشفرض با گرفتن دکمه Ctrl کیبورد و کلیک بر روی آیتم ها می توان چند آیتم را به طور همزمان انتخاب کرد ولی اگر بخواهید فقط یک آیتم قابل انتخاب باشد می توانید از متد ()setSelectionMode و ارسال مقدار ثابت SINGLE_SELECTION از رابط ListSelectionModel به آن استفاده کرد.همان کد ابتدای درس را در در نظر بگیرید. در خط 15 کد فوق کدهای زیر را بنویسید : :

List1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

برای تعیین عرض و ارتفاع آیتم ها از متدهای ()setFixedCellWidth برای تعیین عرض و ()setFixedCellHeight برای تعیین ارتفاع سلول ها استفاده می شود :

List1.setFixedCellWidth(100);
List1.setFixedCellHeight(50);

jlist-in-java-02
برای نمایش سطری و ستونی آیتم ها می توان از متدهای ()setLayoutOrientation برای تعیین نحوه چیدمان افقی یا عمودی آیتم ها و ()setVisibleRowCount برای تعیین سطرهای JList که قرار است آیتم ها در آنها نمایش داده شوند استفاده کرد. در ادامه کدهای بالا کدهای زیر را بنویسید :

List1.setLayoutOrientation(JList. HORIZONTAL_WRAP); 
List1.setVisibleRowCount(2);

مقدار HORIZONTAL_WRAP باعث چینش افقی آیتم ها می شود. آیتمها به طور خودکار طوری در ستون ها قرار می گیرند که تعداد سطرها بیشتر از آن مقداری که تعیین کرده ایم نشود :
jlist-in-java-03
حال مقدار را به VERTICAL_WRAP تغییر داده و برنامه را اجرا و نتیجه را مشاهده کنید :
jlist-in-java-04
برای تعیین رنگ پس زمینه و رنگ فونت آیتم ها هم از متدهای ()setSelectionBackground و ()setSelectionForeground استفاده می شود. کدهای زیر را هم به کد بالا اضافه کنید :

List1.setSelectionBackground(Color.RED);
List1.setSelectionForeground(Color.WHITE);

jlist-in-java-05