Re: Odd behaviour or normal?
"John B. Matthews" <nospam@nospam.invalid> wrote in message
news:nospam-3E95D1.14323404062010@news.aioe.org...
In article <hub7nc$n9r$1@speranza.aioe.org>,
"Rhino" <no.offline.contact.please@example.com> wrote:
I'd like to be clear on whether extending JPanel is or is NOT a
reasonable thing.
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.
So, if I'm not adding new functionality to the JPanel - like the ability to
draw a background image - I shouldn't extend JPanel but should simply
combine existing things like JTextFields and JLabels on a regular JPanel?
class ImagePanel extends JPanel {
BufferedImage img;
JButton button = new JButton();
JTextField text = new JTextField();
ImagePanel(String name) {
super(true);
button.setText(name);
this.add(button);
text.setText(name);
this.add(text);
this.setToolTipText(name);
try {
img = ImageIO.read(new File(name));
this.setPreferredSize(new Dimension(
img.getWidth(), img.getHeight()));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), null);
}
}
There were inevitably problems in getting the labels to line up
properly with the text fields when I had the labels in one JPanel and
the text fields, spinners, etc. on a different JPanel.
This is controlled by the container's layout manager. Nesting JPanels is
one way to achieve a desired effect:
<http://java.sun.com/docs/books/tutorial/uiswing/layout/index.html>
I was pretty familiar with the various Layout Managers when I was first
writing this class about 2003. At the time, it seems to me I tried all of
the different Layout Managers and couldn't get any to do what I want without
some undesireable side effects. That's why I decided to create my own JPanel
subclass.
--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>