列表框與選擇框有完全的不同,而不僅僅是當我們在激活選擇框時的顯示不同,列表框固定在屏幕的指定位置不會改變。另外,一個列表框允許多個選擇:如果我們單擊在超過一個的項目上,未選擇的則表現為高亮度,我們可以選擇象我們想要的一樣的多。如果我們想察看項目列表,我們可以調用getSelectedItem()來產生一個被選擇的項目列表。要想從一個組裡刪除一個項目,我們必須再一次的單擊它。列表框,當然這裡有一個問題就是它默認的動作是雙擊而不是單擊。單擊從組中增加或刪除項目,雙擊調用action()。解決這個問題的方法是象下面的程序假設的一樣重新培訓我們的用戶。
//: List1.java // Using lists with action() import java.awt.*; import java.applet.*; public class List1 extends Applet { String[] flavors = { "Chocolate", "Strawberry", "Vanilla Fudge Swirl", "Mint Chip", "Mocha Almond Fudge", "Rum Raisin", "Praline Cream", "Mud Pie" }; // Show 6 items, allow multiple selection: List lst = new List(6, true); TextArea t = new TextArea(flavors.length, 30); Button b = new Button("test"); int count = 0; public void init() { t.setEditable(false); for(int i = 0; i < 4; i++) lst.addItem(flavors[count++]); add(t); add(lst); add(b); } public boolean action (Event evt, Object arg) { if(evt.target.equals(lst)) { t.setText(""); String[] items = lst.getSelectedItems(); for(int i = 0; i < items.length; i++) t.appendText(items[i] + "\n"); } else if(evt.target.equals(b)) { if(count < flavors.length) lst.addItem(flavors[count++], 0); } else return super.action(evt, arg); return true; } } ///:~
按下按鈕時,按鈕增加項目到列表的頂部(因為addItem()的第二個自變量為零)。增加項目到列表框比到選擇框更加的合理,因為用戶期望去滾動一個列表框(因為這個原因,它有內建的滾動條)但用戶並不願意像在前面的例子裡不得不去計算怎樣才能滾動到要要的那個項目。
然而,調用action()的唯一方法就是通過雙擊。如果我們想監視用戶在我們的列表中的所作所為(尤其是單擊),我們必須提供一個可供選擇的方法。