import java.awt.Graphics; //导入方法依赖的package包/类
/**
* Paints the component.
*/
@Override protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
int width = getWidth();
int height = getHeight();
if (width - BORDER_W > 0 && height - BORDER_H > 0) {
startTimerIfNecessary();
updateCacheIfNecessary(width, height);
paintCachedBackground(g2, width, height);
g.translate(1, 2);
if (containsMouse) {
g.clipRect(1, 0, width - 4, height - 4);
}
else {
g.clipRect(0, 0, width - 2, height - 4);
}
int innerW = width - BORDER_W;
int innerH = height - BORDER_H;
if (heapGrowTimer != null) {
// Render the heap growing animation.
Composite lastComposite = ((Graphics2D)g).getComposite();
float percent = 1f - heapGrowTimer.getPercent();
((Graphics2D)g).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, percent));
g.drawImage(heapGrowTimer.image, 0, 0, null);
((Graphics2D)g).setComposite(lastComposite);
}
paintTicks(g2, innerW, innerH);
if (getTickStyle() == STYLE_OVERLAY) {
g2.drawImage(getGridOverlayImage(), 0, 0, null);
}
if (getShowText()) {
if (getShowDropShadow()) {
paintDropShadowText(g, innerW, innerH);
} else {
g.setColor(textColor);
paintText(g, innerW, innerH);
}
}
g.translate(-1, -2);
} else {
stopTimerIfNecessary();
// To honor opaque contract, fill in the background
g.setColor(getBackground());
g.fillRect(0, 0, width, height);
}
}