2010-12-03 19 views

Respuesta

115
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()); 
     } 
    } 
}); 
+20

Tenga en cuenta que si la lista tiene un espacio vacío, y un usuario hace doble clic en el espacio vacío, esto detectará un doble clic en el último objeto de la lista. Si solo desea detectar clics en el área de la lista que contiene elementos, puede marcarlos así: Rectángulo r = list.getCellBounds (0, list.getLastVisibleIndex()); if (r! = Null && r.contains (evt.getPoint())) { int index = list.locationToIndex (evt.getPoint()); } –

+11

¿No sería suficiente pedirle a la JList el artículo seleccionado actualmente, en lugar de usar locationToIndex? es decir, simplemente llame a list.getSelectedIndex(). –

+0

@CookieMonster, no funcionaría si la lista es de selección múltiple. –

10

Sé que tiene una solución simple, pero es posible que desee comprobar hacia fuera List Action para una solución más general que le permitirá utilizar el ratón, así como el tablero de llaves. El diseño adecuado de GUI debe permitir el uso para usar cualquiera de los enfoques.

9

(en base a Mohamed Saligh, la respuesta aceptada)

Si está utilizando NetBeans

Seleccione el JList ventana> Eventos> 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); 
    } 
} 
Cuestiones relacionadas