JList 元素上的双击事件

Posted

技术标签:

【中文标题】JList 元素上的双击事件【英文标题】:Double-click event on JList element 【发布时间】:2011-05-19 16:24:46 【问题描述】:

我有一个JList 和一个DefaultListModel

如何使JList 中的项目对双击事件做出反应?

【问题讨论】:

【参考方案1】:
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());
        
    
);

【讨论】:

请注意,如果列表中有空白区域,并且用户双击空白区域,这将检测到对列表中最后一个对象的双击。如果您只想检测包含项目的列表区域中的点击,您可以像这样检查: Rectangle r = list.getCellBounds(0, list.getLastVisibleIndex()); if (r != null && r.contains(evt.getPoint())) int index = list.locationToIndex(evt.getPoint()); 向 JList 询问当前选择的项目,而不是使用 locationToIndex 还不够吗?即只需调用 list.getSelectedIndex(). 此示例将通过多次单击任何鼠标按钮来触发。如果您只关心第一个按钮,您还需要检查if (evt.getButton() == MouseEvent.BUTTON1)【参考方案2】:

(基于 Mohamed Saigh,接受的回复)

如果您使用的是 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);
    

【讨论】:

【参考方案3】:

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

使用ListAction 的最基本示例是:

String[] data =  "zero", "one", "two", "three", "four", "five" ;
JList list = new JList( data );

Action displayAction = new AbstractAction()

    public void actionPerformed(ActionEvent e)
    
        JList list = (JList)e.getSource();
        System.out.println(list.getSelectedValue());
    
;

ListAction la = new ListAction(list, displayAction);

【讨论】:

以上是关于JList 元素上的双击事件的主要内容,如果未能解决你的问题,请参考以下文章

vue的双击事件(dbclick的使用)

如何检测视图上的双击? [复制]

Objective-c:如何检测视图上的双击?

将组合框单元格上的双击激活更改为单击?

如何处理复合组件中子项的双击?

用户自定义TreeView控制双击冒泡事件WPF MVVM问题,怎么解决