The suspect, identified as 50-year-old Officer Guarionex Candelario, is in custody, police said.
"There are no words to describe this tragedy where three colleagues have lost their lives. Our condolences for the families," Puerto Rico Police Deputy Superintendent Col. Juan Rodriguez Davila said on the Twitter page of Puerto Rico's police force.
Candelario is accused of killing Commander Frank Román Rodríguez, Lt. Luz M. Soto Segarra and Agent Rosario Hernández de Hoyos, police said.
Authorities haven't detailed a motive for the killings, which occurred on the sixth floor of an office building Monday morning. An argument preceded the shooting, officials said.
Col. Hector Agosto said he tried to save the officers after they were shot. As he spoke to reporters Monday, he still had blood stains on his shirt.
"Even though I am a human being like any other, I have tried to compose myself to stay firm and do what's right so that my colleagues understand that they have a leader that will guide them as I have always, on the right path," he said. "We have to learn from this very difficult situation."
CNN affiliate WAPA showed videos of devastated family members arriving at the police office in tears and consoling each other outside.
Gov. Alejandro Garcia Padilla declared three days of mourning.
"I express my solidarity to the police of Puerto Rico," he told reporters. "When you work in a group that is a family, everyone feels it exactly like a family."
Before Monday's shootings, 123 law enforcement officers had been killed in the line of duty in the United States in 2015, compared with 133 in 2014, according to the Officer Down Memorial Page
, a nonprofit organization "dedicated to honoring America's fallen law-enforcement heroes."
Excluding accidental shootings, 36 police officers in the United States had been killed by gunfire this year before the killings in Puerto Rico, compared with 47 last year, the organization said.
One police officer in Puerto Rico had been killed in the line of duty this year before the incident in Ponce; five died in the line of duty in 2014, the organization said.