Pretty neat, right?
I used verlet integration to calculate the movement of the balls, an O^1 algorithm to calculate collisions with the stage, then an O^2 algorithm to calculate collisions with the other balls. I had to create custom Vector and Ball classes, and used native java packages for drawing and timing.
If you want to see my code, you can look at the repository at https://github.com/faris-amer/CollisionSim to view the full code. I'm pretty proud of myself for this one, I didn't follow any tutorials and just followed a few videos that covered collision detection conceptually, but never a full code rundown.
All the steps I followed to create the program, as well as a longer video of the full program running is below!