addItem(String) 動態新增ItemEvent (Java 1.1+) / action() (Java 1.0)//: Choice1.java
import java.awt.*;
import java.applet.*;
public class Choice1 extends Applet {
String[] description = {"Ebullient","Obtuse","Recalcitrant","Brilliant",
"Somnescent","Timorous","Florid","Putrescent"};
TextField t = new TextField(30);
Choice c = new Choice();
Button b = new Button("Add items");
int count = 0;
public void init() {
t.setEditable(false);
for (int i=0; i<4; i++) c.addItem(description[count++]);
add(t); add(c); add(b);
}
public boolean action(Event evt, Object arg) {
if (evt.target.equals(c)) { // 選擇改變
t.setText("index: " + c.getSelectedIndex() + " " + (String)arg);
} else if (evt.target.equals(b)) { // 動態新增
if (count < description.length) c.addItem(description[count++]);
} else return super.action(evt, arg);
return true;
}
} ///:~
c.getSelectedIndex():取得選中索引 (0-based)arg (Java 1.0 action 第二參數):直接提供選中項目字串,等價於 c.getSelectedItem()String selected = c.getSelectedItem(); // 字串
int index = c.getSelectedIndex(); // 索引 (-1 表示無選擇)
int count = c.getItemCount(); // 項目總數
String item = c.getItem(index); // 取得指定索引項目
| 技術 | 核心類別 | 關鍵增強 |
|---|---|---|
| Swing | JComboBox | 支援可編輯模式 (ComboBox)、自訂渲染器 (ListCellRenderer)、動態寬度自動調整、鍵盤搜尋、資料模型分離 (ComboBoxModel) |
| JavaFX | ComboBox<T> | 泛型型別安全、CellFactory 自訂 UI、可編輯、CSS 樣式、converter 字串/物件轉換、虛擬化大數據 |
| Web | <select> / Select2 / React Select | 原生單選、豐富組件庫支援搜尋、分組、遠端載入、多選、標籤化 |
JComboBox + AutoComplete / JavaFX ComboBox + 過濾器)。setEditable(true),JavaFX 設定 editableProperty()。DefaultComboBoxModel / ObservableList) 而非直接呼叫 addItem(),保持 MVC 分離。Choice 是「唯讀單選下拉」的極簡實現:記憶體佔用小、API 極少。但其首次展開鎖定寬度缺陷與無可編輯/搜尋/自訂渲染限制,使其僅適合極簡單、固定選項場景。現代開發請直接使用 JComboBox 或 ComboBox,獲得完整下拉選單體驗與擴充性。