2. Swing automatically uses hardware accelerated backbuffers using volatileImage.
Actually SWING uses AWT for its rendering so someone has lead you astray.
By definition SWING can't do anything that AWT doesnt do (at least currently.)
3. I don't want to use any external .dll files or classes.
4. I don't see any point using openGL for 2d if Java2D and Swing are just as fast.
Okay so these are your givens.
5. I want to use an application, not an applet.
This is a good thing as it avoids many problems.
6. JFrame is the best container to use.
Best for what? (See below)
So, what'd be a good framework? Would my main class extend JFrame, or could I include the JFrame as a private variable inside my main class?
Okay. so now its time to straighten you out a bit. As mentioned above, Swing is a just a layer over AWT. if you arent doing window/component GUIs there is really little point to it.
I am assuming you want to make a 2D game or other graphics intensive 2D application.
What you want to look at is active rendering with AWT. This is covered in the (somewhat misnamed) FullScreen tutorial here:http://java.sun.com/docs/books/tutorial/extra/fullscreen/
These techniques actually work in full screen or windowed mode. For an example of a game skelleton that runs in either mode you can look at the Scroller demo. (I believe its on the Wiki, if you can't find it there search for "Scroller" here as the URL has been posted multiple times.)
A fair warning thing: This technique works great under 1.4 under Win32. I believe Dmitri said it works about as well as it can under X given X's limitations. Last time I tried it on the Mac it sucked performance-wise but Apple considers that a bug and is aware of it. I don't know if its been fixed yet or not.