在 Java Swing 開發中,JComboBox 是常用的下拉選單元件,允許使用者從預設選項中選擇單一項目。本文提供一個完整的 Applet 範例,示範如何建立下拉選單、監聽選項變更事件,並動態切換顯示的圖片。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ComboBoxDemo extends JApplet implements ItemListener {
JLabel imageLabel;
ImageIcon[] icons = new ImageIcon[3];
public void init() {
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
// 建立下拉選單並加入選項
JComboBox comboBox = new JComboBox<>();
comboBox.addItem("6");
comboBox.addItem("7");
comboBox.addItem("8");
comboBox.addItemListener(this);
contentPane.add(comboBox);
// 預設顯示第一張圖片
imageLabel = new JLabel(new ImageIcon("D:/data/Images/6.gif"));
contentPane.add(imageLabel);
// 預載圖片資源(建議在實際專案中使用 getResourceAsStream)
for (int i = 0; i < 3; i++) {
icons[i] = new ImageIcon("D:/data/Images/" + (6 + i) + ".gif");
}
}
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
String selected = (String) e.getItem();
int index = Integer.parseInt(selected) - 6;
if (index >= 0 && index < icons.length) {
imageLabel.setIcon(icons[index]);
}
}
}
}
itemStateChanged 方法來處理選項變更事件。getStateChange() == ItemEvent.SELECTED:確保只在使用者真正選取新項目時觸發,避免取消選取時也執行邏輯。init() 預先載入所有圖片至陣列,避免每次切換時重複讀取磁碟造成延遲。Class.getResource() 取得資源路徑,而非硬式編碼絕對路徑。若需在 JFrame 中使用,只需將 JApplet 改為 JFrame,並在 main 方法中建立視窗實例。此外,JComboBox 也支援自訂渲染器,可顯示圖文混合的複雜選項,適合更豐富的 UI 需求。