To me, extending JFrame for your main application window does make logical sense. If during development you think, “Maybe my main window’s layout should be a little different to make things more intuitive…”, which class seems most logical to look in for that window’s layout? I think it would be a class defining the window itself. If there were no such class, you’d think, “Okay, where is the code that creates my main window?” There’s no immediately obvious answer (okay, maybe if you wrote the entire app yourself so you’re familiar with it…). If you inherit someone else’s code, or download someone else’s open source project to work on, you’d have to resort to skimming through class file names to find one that seemed like it was where the job was done. Maybe not the worst case in the world, but it sure seems less intuitive than say “MainWindow.java” to me.
To me, extending JFrame is both of these things. But I’m surely biased on this point since it’s the way I always do things, so I can’t argue against it.
Perhaps I’ll try not extending JFrame on my next project. Maybe I’ll change my tune. 