示範 JList 搭配 DefaultListModel 實現動態增刪元素:文字框輸入名稱點擊「添加」插入至選中項後;選中項點擊「刪除」移除。包含單選模式、滾動面板、按鈕狀態聯動。
public class ListDemo extends JPanel implements ListSelectionListener {
private JList list;
private DefaultListModel listModel;
private JButton fireButton; // 刪除
private JTextField employeeName;
public ListDemo() {
// 初始化模型與預設資料
listModel = new DefaultListModel();
listModel.addElement("Alan Sommerer"); ...
list = new JList(listModel);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setSelectedIndex(0);
list.addListSelectionListener(this);
list.setVisibleRowCount(5);
JScrollPane listScrollPane = new JScrollPane(list);
// 按鈕與事件綁定
JButton hireButton = new JButton("添加");
hireButton.addActionListener(new HireListener(hireButton));
fireButton = new JButton("刪除");
fireButton.addActionListener(new FireListener());
// 文本框監聽
employeeName = new JTextField(10);
employeeName.addActionListener(new HireListener(hireButton));
employeeName.getDocument().addDocumentListener(new HireListener(hireButton));
// 版面配置
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
buttonPane.add(fireButton); buttonPane.add(Box.createHorizontalStrut(5));
buttonPane.add(new JSeparator(SwingConstants.VERTICAL));
buttonPane.add(Box.createHorizontalStrut(5));
buttonPane.add(employeeName); buttonPane.add(hireButton);
add(listScrollPane, BorderLayout.CENTER);
add(buttonPane, BorderLayout.PAGE_END);
}
// ... 內部類 FireListener, HireListener 實現增刪邏輯
// ... valueChanged 實現選中狀態控制刪除按鈕啟用
}
insertElementAt、remove、contains 等操作。視窗中央顯示可滾動列表,底部為輸入框與添加/刪除按鈕,操作即時反映於列表。