2010-03-08 9 views
7

Estoy buscando una forma de seleccionar varios elementos dentro de una lista J haciendo clic en cada elemento.Seleccionar varios elementos en JList sin utilizar la tecla Ctrl/Command

La forma normal de hacer esto es mantener presionada la tecla comando/ctrl y luego hacer clic.

Creo que sería más intuitivo simplemente para permitir al usuario hacer clic en los elementos y sin necesidad de mantener presionada una tecla.

+0

Mi aplicación está dirigida a los no alfabetizados por computadora, así que sentí que no necesitaba usar el estándar (últimas palabras famosas). He descubierto por experiencia que las personas algunas veces olvidan mantener ctrl y anulan la selección de todos los demás elementos. Iba a hacer un poco de pruebas de usabilidad para ver qué prefieren las personas. – Gordon

+0

Receta para una aplicación funky no estándar (como Lotus Notes) .. –

+0

Definitivamente tiene sentido. Estuve probando y no hay ningún documento/tutorial que diga que DEBE presionar Control para hacer una selección múltiple ... estaba probando y probando y no encontró ningún problema en el código ... +1. – FaithReaper

Respuesta

10

Piense dos veces antes de cambiar el comportamiento predeterminado. A menos que tenga algún uso-caso especial, no gustaría a mi Lista de trabajar diferente a cualquier otro lugar :)

Habiendo dicho esto, usted debería ser capaz de utilizar su propio ListSelectionModel:

list.setSelectionModel(new DefaultListSelectionModel() { 
    @Override 
    public void setSelectionInterval(int index0, int index1) { 
     if(super.isSelectedIndex(index0)) { 
      super.removeSelectionInterval(index0, index1); 
     } 
     else { 
      super.addSelectionInterval(index0, index1); 
     } 
    } 
}); 
+0

Gracias que funcionó una delicia. No estoy seguro de que sea lo correcto, pero me gustaría probarlo con algunas personas. – Gordon

+0

Está funcionando pero preste atención que cualquier ListSelectionListener en esa lista no será notificado. Para solucionarlo, agregue 'fireValueChanged (index0, index1);' al final del método. – Alex

+0

Funciona bien normalmente, pero NO si mueve el mouse un píxel mientras se presiona el botón. Luego se deselecciona de nuevo :-( – runholen

0

Creo que puede lograr esto fácilmente conectando un detector de mouse en su JList y seleccionando programáticamente el elemento en el código de escucha. Por supuesto, es probable que necesite algún código para determinar qué elemento se presionó basándose en algunas coordenadas.

4

Para que normalmente usaría un grupo de casilla de verificación de JCheckBox elementos.

Los usuarios ya se utilizan con el hecho de que necesitan presionar CTRL para seleccionar varios elementos en un cuadro de lista. No debe cambiar la experiencia/expectativa predeterminada.

3
list.setSelectionModel(new DefaultListSelectionModel() { 
    private int i0 = -1; 
    private int i1 = -1; 

    public void setSelectionInterval(int index0, int index1) { 
     if(i0 == index0 && i1 == index1){ 
      if(getValueIsAdjusting()){ 
       setValueIsAdjusting(false); 
       setSelection(index0, index1); 
      } 
     }else{ 
      i0 = index0; 
      i1 = index1; 
      setValueIsAdjusting(false); 
      setSelection(index0, index1); 
     } 
    } 
    private void setSelection(int index0, int index1){ 
     if(super.isSelectedIndex(index0)) { 
      super.removeSelectionInterval(index0, index1); 
     }else { 
      super.addSelectionInterval(index0, index1); 
     } 
    } 
}); 
Cuestiones relacionadas