JList元素上的双击事件


Answers:


141
String[] items = {"A", "B", "C", "D"};
JList list = new JList(items);

list.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent evt) {
        JList list = (JList)evt.getSource();
        if (evt.getClickCount() == 2) {

            // Double-click detected
            int index = list.locationToIndex(evt.getPoint());
        } else if (evt.getClickCount() == 3) {

            // Triple-click detected
            int index = list.locationToIndex(evt.getPoint());
        }
    }
});

23
请注意,如果列表中有空白空间,并且用户双击空白空间,则会检测到双击列表中的最后一个对象。如果只想检测包含项目的列表区域中的点击,则可以像这样进行检查:Rectangle r = list.getCellBounds(0,list.getLastVisibleIndex()); 如果(r!= null && r.contains(evt.getPoint())){int index = list.locationToIndex(evt.getPoint()); }
杰里米·布鲁克斯

16
向JList询问当前选定的项目,而不是使用locationToIndex,这还不够吗?即简单地调用list.getSelectedIndex()。
Mostowski崩溃2012年

3
此示例将通过在任何鼠标按钮上单击多次来触发。如果您只关心第一个按钮,那么您还需要检查if (evt.getButton() == MouseEvent.BUTTON1)
Yoshiya

11

我知道您有一个简单的解决方案,但您可能想查看List Action,以获得更通用的解决方案,该解决方案将使您既可以使用鼠标又可以使用键盘。正确的GUI设计应允许使用任何一种方法。


11

(基于已接受的回复Mohamed Saligh)

如果您使用的是NetBeans

选择JList>事件窗口> mouseClicked

private void jListNicknamesMouseClicked(java.awt.event.MouseEvent evt) {                                            
    JList list = (JList)evt.getSource();
    if (evt.getClickCount() == 2) {
        int index = list.locationToIndex(evt.getPoint());
        System.out.println("index: "+index);
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.