Java 双击JList元素上的事件

Java 双击JList元素上的事件,java,swing,jlist,defaultlistmodel,Java,Swing,Jlist,Defaultlistmodel,我有一个JList和一个DefaultListModel 如何使JList列表中的项目对双击事件作出反应?我知道您有一个简单的解决方案,但您可能希望查看一个更通用的解决方案,该解决方案允许您使用鼠标和键盘。正确的GUI设计应允许用户使用任何一种方法。(基于Mohamed Saligh,公认的回答) String[] items = {"A", "B", "C", "D"}; JList list = new JList(items); list.addMouseListener(new Mou

我有一个
JList
和一个
DefaultListModel


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

我知道您有一个简单的解决方案,但您可能希望查看一个更通用的解决方案,该解决方案允许您使用鼠标和键盘。正确的GUI设计应允许用户使用任何一种方法。

(基于Mohamed Saligh,公认的回答)

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

选择JList>事件窗口>鼠标单击

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);
    }
}

请注意,如果列表中有空白,并且用户双击空白,则会检测到双击列表中的最后一个对象。如果只想在包含项的列表区域中检测单击,可以这样检查:矩形r=list.getCellBounds(0,list.getLastVisibleIndex());如果(r!=null&&r.contains(evt.getPoint()){int index=list.locationToIndex(evt.getPoint());}向JList请求当前所选项目,而不是使用locationToIndex,难道还不够吗?i、 只需调用list.getSelectedIndex()。此示例将通过多次单击任何鼠标按钮触发。如果您只关心第一个按钮,那么还需要检查
If(evt.getButton()==MouseEvent.BUTTON1)