在 Java 圖形介面開發中,java.awt.List 組件常用於顯示可選項目清單。當使用者雙擊某個項目時,通常需要觸發特定業務邏輯(如開啟詳情視窗、編輯資料等)。本文示範如何透過 MouseListener 實作 List 組件的雙擊事件處理。
MouseAdapter 匿名類別實作 MouseListenermouseClicked(MouseEvent e) 方法e.getClickCount() == 2 確認為雙擊getSelectedIndex() 取得選中項目索引getItem(index) 取得項目內容import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ListDoubleClickDemo extends JFrame {
private List lstRoster;
public ListDoubleClickDemo() {
setTitle("List 雙擊事件示範");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
// 建立 List 組件並加入測試資料
lstRoster = new List(10, false); // 顯示 10 行,單選模式
lstRoster.add("張三");
lstRoster.add("李四");
lstRoster.add("王五");
lstRoster.add("趙六");
lstRoster.add("錢七");
// 註冊雙擊事件監聽器
lstRoster.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// 確認為雙擊
if (e.getClickCount() == 2) {
List sourceList = (List) e.getSource();
int index = sourceList.getSelectedIndex();
// 檢查是否有選中項目
if (index >= 0) {
String selectedItem = sourceList.getItem(index);
JOptionPane.showMessageDialog(
ListDoubleClickDemo.this,
"雙擊選中: " + selectedItem + "\n索引: " + index,
"事件觸發",
JOptionPane.INFORMATION_MESSAGE
);
// 這裡可執行實際業務邏輯
// handleDoubleClick(selectedItem, index);
}
}
}
});
add(new Label("雙擊下方項目測試:"));
add(lstRoster);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new ListDoubleClickDemo());
}
}
javax.swing.JList 搭配 ListSelectionListener,功能更豐富MouseListener 處理右鍵點擊顯示彈出選單KeyListener 支援 Enter 鍵觸發相同動作,提升無障礙性DefaultListModel 管理資料,而非直接操作 List 組件Q: 為何單擊也觸發雙擊邏輯?
A: 需嚴格判斷 e.getClickCount() == 2,單擊時計數為 1。
Q: 如何區分左鍵/右鍵雙擊?
A: 使用 SwingUtilities.isLeftMouseButton(e) 或 e.getButton() == MouseEvent.BUTTON1 判斷。