I use java. I use a lot more application side of programming in java, but from my experiences with Java 2D and Java 3D, you need to know the application side first, which is basic coding with I/O. Then you can go to graphical interfaces and all the events. Everything you do in an applet is an event. some classes with the java compiler are abstract which means you have to make every method in that class in your program, whether you need to handle mouse holds or not. That can be annoying, but otherwise the programmer is totally in control of what the user can do. No cheating physics or "convenient errors" in your program.