Because Canvas is less of a pain to use.
Can I ask how? I'm not trying to be argumentative or disagree, I just honestly can't see how Canvas is easier than JPanel or JComponent.
Basically, it doesn't make sense to botch up the game screen AND the ui / hud into the same screen. Separate them instead. And for a simple game screen Canvas is easy and flexible. Adding your Canvas into a Swing app is as simple as addComponent( canvas );
You can call add(JPanel) or add(JComponent) just as easily though, can't you?
I wouldn't suggest putting the ui and the game inside the same component. Instead, extend JPanel or JComponent (exactly like you do with Canvas), then override paintComponent() and you get double buffering for free. Then use a completely different JPanel for your ui (buttons, checkboxes, whatever), probably again exactly like you'd do with Canvas. This is my standard way of mocking up a game, and I don't see how Canvas makes that easier.
I feel like I'm missing something obvious, but I can't see what it is.