JList的使用
- JList與JCheckBox的使用比較類似可以選取一至多項,JList可以整列選取。
第三種構造函數無法改變項目的數量
--構造一個簡單的JList
import java.awt.Container; import java.awt.GridLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Vector; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; public class JList01 { public static void main(String[] args) { JFrame f=new JFrame(); Container contentpane=f.getContentPane(); f.setLayout(new GridLayout(1, 2)); String[] s=new String[]{"日本","英國","法國","中國","美國"}; Vector v=new Vector(); v.addElement("nokia 8850"); v.addElement("nokia 8250"); v.addElement("notorola v8088"); v.addElement("motorola v3688"); v.addElement("panasonic GD92"); v.addElement("其他"); JList jList=new JList(s); jList.setBorder(BorderFactory.createTitledBorder("您最喜歡到哪個國家玩呢")); JList jList2=new JList(v); jList2.setBorder(BorderFactory.createTitledBorder("你最喜歡哪部手機呢")); contentpane.add(new JScrollPane(jList)); contentpane.add(new JScrollPane(jList2)); contentpane.add(jList2); f.pack(); f.show(); f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { // TODO Auto-generated method stub System.exit(0); } }); } }
在這個窗口中,當窗口變小時,list沒有滾動的效果,標紅的代碼段可以展示這個效果
*選擇模式(Selection Mode)
設置選擇模式可以用JList所提供的setSelectionMode方法(int selectionMode)
--利用ListModel構造JList
在實際操作中可以繼承AbstractListModel這個抽象類,
1 public class JList03 { 2 3 public JList03(){ 4 JFrame f=new JFrame("JList03"); 5 Container contentpane=f.getContentPane(); 6 7 ListModel mode=new DataModel(); 8 JList list=new JList(mode); 9 list.setBorder(BorderFactory.createTitledBorder("您最喜歡到哪個國家玩呢")); 10 11 contentpane.add(new JScrollPane(list)); 12 f.pack(); 13 f.show(); 14 f.addWindowListener(new WindowAdapter() { 15 16 @Override 17 public void windowClosing(WindowEvent e) { 18 // TODO Auto-generated method stub 19 System.exit(0); 20 } 21 22 }); 23 24 } 25 public static void main(String[] args) { 26 new JList03(); 27 } 28 } 29 class DataModel extends AbstractListModel{ 30 31 String[] s={"美國","日本","中國","英國","法國","意大利","澳洲","韓國"}; 32 @Override 33 public Object getElementAt(int index) { 34 // TODO Auto-generated method stub 35 return (index+1)+"."+s[index++]; 36 } 37 @Override 38 public int getSize(){ 39 return s.length; 40 } 41 42 43 }
*事實上,Java還提供了DefaultListModel這個類,它繼承了前一個類,並實現了所有的抽象方法。
--建立有圖像的JList
要在JList上加入icon,我們就要先了解一下ListCellRenderer這個接口。

我們先要了解一下這個方法。
*要想在這個JList上加入icon圖像重要的一點是把JList的每一個項目當成JLabel
代碼過程略
--JList的事件處理
JList的事件處理分為兩種:一是取得用戶選取的項目;二是在JList的項目上單擊兩次,運行相對應的動作。
- 繼承ListSelectionListener interface
在JList這個類中有addListSelectionListener這個方法,可以檢測用戶對list的選取有任何改變

model2=new DataModel(2); list2=new JList(model2); list2.setBorder(BorderFactory.createTitledBorder("您最喜歡到哪個國家玩呢")); list2.addMouseListener(this);
DefaultListModel ,它在jdk中是這樣解釋的:此類以松散方式實現 java.util.Vector
API,它實現 1.1.x 版本的 java.util.Vector
,
沒有 collection 類支持,並且在發生更改時通知 ListDataListener
。目前,它委托給一個 Vector
,在將來的版本中,它將是一個真正的 Collection 實現。
**方法解釋locationToIndex
public int locationToIndex(Point location)
-
返回最接近列表的坐標系統中給定位置的單元索引。要確定單元是否實際包含指定的位置,需要將該點與單元的邊界進行比較,邊界由
getCellBounds
提供。如果模型為空,則此方法返回-1
此方法是委托給列表的
ListUI
中同名方法的覆蓋方法。如果列表沒有ListUI
,則它返回-1
。 -
-
- 參數:
-
location
- 點的坐標 - 返回:
-
接近給定位置的單元索引或
-1
2. MouseListener interface