For one thing, it's nice to have the same frame (and code) for both the hardware and the software renderers. That's why they created the AWTGLCanvas (and why you created your KeyMapper) in the first place, after all. And as a habit, maybe it's a bad habit, I don't know, my main classes usually extend AWT frames, rather than instantiate them.