I have adjusted the spin a few times during the last 3 or 4 versions, so I might do that again. "Random" isn't the problem though, I'm sure, since the calculations are completely deterministic. If you can tell me better in which situation the spin appears wrong, I can go and fix it. "Random" would leave me to pure guessing and that isn't a good base for bugfixing. At the moment I'd translate "Random" to "Doesn't work as I expected", which may or may not be a bug, depending on what you expected
Java seemed ok for this little toy. I wouldn't know what another language could do better there.
The focus problem is annoying that is right, I ran into that, too. I have a few ideas how to fix it, but I haven't decided yet which way to go.
Thanks for trying and letting me know about your experiences with it
Edit: I was thinking about the "random" problem some more. Maybe you don't mean the spin at all, but the bounce direction? The paddle is not flat, but curved. If the ball hits left of the paddle center, it gets bounced back more leftwards, if it hits right, it gets bounces back more rightwards. There is a neutral zone in the middle of the padde.
Spin is, if the ball flies a curve as result of a bounce. It can even be a circle if you give it a lot of spin. Also spin reverses as result of a bounce. So depending on the spin the ball already has, the paddle movement, and the location where the ball hits the paddle, I presume the result can appear "random" to a new player. But it's just complex.