protected void addImpl(Component x,
Object constraints,
int index) {
if (x.getParent() == this) {
return;
}
else {
super.addImpl(x, constraints, index);
}
}
If the specified component is already a child of this then we don't
bother doing anything - stacking order doesn't matter for cell
renderer components (CellRendererPane doesn't paint anyway).< |
public void paintComponent(Graphics g,
Component c,
Container p,
Rectangle r) {
paintComponent(g, c, p, r.x, r.y, r.width, r.height);
}
Calls this.paintComponent() with the rectangles x,y,width,height fields. |
public void paintComponent(Graphics g,
Component c,
Container p,
int x,
int y,
int w,
int h) {
paintComponent(g, c, p, x, y, w, h, false);
}
Calls this.paintComponent(g, c, p, x, y, w, h, false). |
public void paintComponent(Graphics g,
Component c,
Container p,
int x,
int y,
int w,
int h,
boolean shouldValidate) {
if (c == null) {
if (p != null) {
Color oldColor = g.getColor();
g.setColor(p.getBackground());
g.fillRect(x, y, w, h);
g.setColor(oldColor);
}
return;
}
if (c.getParent() != this) {
this.add(c);
}
c.setBounds(x, y, w, h);
if(shouldValidate) {
c.validate();
}
boolean wasDoubleBuffered = false;
if ((c instanceof JComponent) && ((JComponent)c).isDoubleBuffered()) {
wasDoubleBuffered = true;
((JComponent)c).setDoubleBuffered(false);
}
Graphics cg = g.create(x, y, w, h);
try {
c.paint(cg);
}
finally {
cg.dispose();
}
if (wasDoubleBuffered && (c instanceof JComponent)) {
((JComponent)c).setDoubleBuffered(true);
}
c.setBounds(-w, -h, 0, 0);
}
Paint a cell renderer component c on graphics object g. Before the component
is drawn it's reparented to this (if that's necessary), it's bounds
are set to w,h and the graphics object is (effectively) translated to x,y.
If it's a JComponent, double buffering is temporarily turned off. After
the component is painted it's bounds are reset to -w, -h, 0, 0 so that, if
it's the last renderer component painted, it will not start consuming input.
The Container p is the component we're actually drawing on, typically it's
equal to this.getParent(). If shouldValidate is true the component c will be
validated before painted. |