I've found that when one of the canned swing components doesn't do what you want out of the box, it's usually easier to create your own custom component by extending JComponent than to extend an existing component. But if you really want to extend JLabel, you can manually clear the canvas yourself by simply calling
Code:
Rectangle r = getBounds();
g.clearRect(r.x, r.y, r.width, r.height);
...this is actually sloppy, as you should take the insets into account as well. This certainly isn't a Graphics2D bug though. There is nothing in the API that states it will automatically clear the canvas for you.