//Asignar al modelo de selección del JTable (jTable1 es este caso),
//  un objeto de una clase heredada de ListSelectionListener. 
jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

    //El método valueChange se debe sobreescribir obligatoriamente. 
    //Se ejecuta automáticamente cada vez que se hace una nueva selección. 
    @Override 
    public void valueChanged(ListSelectionEvent e) { 
        //Obtener el número de filas seleccionadas 
        int cuentaFilasSeleccionadas = jTable1.getSelectedRowCount(); 
        System.out.println("Hay seleccionadas: " + cuentaFilasSeleccionadas + " filas");

        if (cuentaFilasSeleccionadas == 1) { 
            //Sólo hay una fila seleccionada 
            int indiceFilaSeleccionada = jTable1.getSelectedRow(); 
            System.out.println("Fila seleccionada: " + indiceFilaSeleccionada);
        } else { 
            //Hay varias filas seleccionadas 
            int[] indicesfilasSeleccionadas = jTable1.getSelectedRows(); 
            System.out.println("Filas seleccionadas: "); 
            for (int indice : indicesfilasSeleccionadas) { 
                System.out.print(indice + " "); 
            } 
            System.out.println(); 
        } 
    } 

});

Por defecto, se permite que el usuario seleccione varias filas, incluso en distintos intervalos. Si se desea cambiar este comportamiento se debe usar una de las siguientes instrucciones:

//Sólo se podrá seleccionar una fila 
jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
//Sólo se podrá seleccionar un intervalo de filas 
jTable1.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); 
//Se podrán seleccionar varios intervalos de filas 
jTable1.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);