双击JList元素上的事件

Lob*_*obo 69 java swing jlist defaultlistmodel

我有JList一个DefaultListModel.

如何在JList双击事件的反应中制作一个项目?

Moh*_*igh 130

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());
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

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

cam*_*ckr 11

我知道您有一个简单的解决方案,但您可能需要查看列表操作以获得更通用的解决方案,该解决方案将允许您使用鼠标和键盘.适当的GUI设计应该允许使用任何一种方法.


San*_*ues 10

(根据Mohamed Saligh,接受的答复)

如果您使用的是NetBeans

选择JList> Events窗口> 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);
    }
}
Run Code Online (Sandbox Code Playgroud)