import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class ClipDemo extends JComponent {
private static Color red = new Color(255, 0, 0, 150);
private static Color green = new Color(0, 255, 0, 150);
private static Color blue = new Color(0, 0, 255, 150);
private static Font monoFont = new Font("Monospaced", Font.BOLD
| Font.ITALIC, 36);
private static Font sanFont = new Font("SanSerif", Font.PLAIN, 12);
private static Font serifFont = new Font("Serif", Font.BOLD, 24);
private static ImageIcon java2sLogo = new ImageIcon("java2sLogo.gif");
public void paintComponent(Graphics g) {
super.paintComponent(g);
// get damaged region
Rectangle clipRect = g.getClipBounds();
int clipx = clipRect.x;
int clipy = clipRect.y;
int clipw = clipRect.width;
int cliph = clipRect.height;
// fill damaged region only
g.setColor(Color.white);
g.fillRect(clipx, clipy, clipw, cliph);
if (clipx <= 240 && clipy <= 240) {
g.setColor(Color.yellow);
g.fillOval(0, 0, 240, 240);
System.out.println(" yellow Oval repainted.");
}
if (clipx + clipw >= 160 && clipx <= 400 && clipy + cliph >= 160
&& clipy <= 400) {
g.setColor(Color.magenta);
g.fillOval(160, 160, 240, 240);
System.out.println(" magenta Oval repainted.");
}
int iconWidth = java2sLogo.getIconWidth();
int iconHeight = java2sLogo.getIconHeight();
if (clipx + clipw >= 280 - (iconWidth / 2) && clipx <= (280 + (iconWidth / 2))
&& clipy + cliph >= 120 - (iconHeight / 2) && clipy <= (120 + (iconHeight / 2))) {
java2sLogo.paintIcon(this, g, 280 - (iconWidth / 2), 120 - (iconHeight / 2));
System.out.println(" logo below blue Rect repainted.");
}
if (clipx + clipw >= 120 - (iconWidth / 2) && clipx <= (120 + (iconWidth / 2))
&& clipy + cliph >= 280 - (iconHeight / 2) && clipy <= (280 + (iconHeight / 2))) {
java2sLogo.paintIcon(this, g, 120 - (iconWidth / 2), 280 - (iconHeight / 2));
System.out.println(" logo below red Rect repainted.");
}
if (clipx + clipw >= 60 && clipx <= 180 && clipy + cliph >= 220
&& clipy <= 340) {
g.setColor(red);
g.fillRect(60, 220, 120, 120);
System.out.println(" red Rect repainted.");
}
if (clipx + clipw > 140 && clipx < 260 && clipy + cliph > 140
&& clipy < 260) {
g.setColor(green);
g.fillOval(140, 140, 120, 120);
System.out.println(" green Oval repainted.");
}
if (clipx + clipw > 220 && clipx < 380 && clipy + cliph > 60
&& clipy < 180) {
g.setColor(blue);
g.fillRect(220, 60, 120, 120);
System.out.println(" blue Rect repainted.");
}
g.setColor(Color.black);
g.setFont(monoFont);
FontMetrics fm = g.getFontMetrics();
iconWidth = fm.stringWidth("Java Source");
iconHeight = fm.getAscent();
int d = fm.getDescent();
if (clipx + clipw > 120 - (iconWidth / 2) && clipx < (120 + (iconWidth / 2))
&& clipy + cliph > (120 + (iconHeight / 4)) - iconHeight
&& clipy < (120 + (iconHeight / 4)) + d) {
g.drawString("Java Source", 120 - (iconWidth / 2), 120 + (iconHeight / 4));
System.out.println(" Java Source repainted.");
}
g.setFont(sanFont);
fm = g.getFontMetrics();
iconWidth = fm.stringWidth("and");
iconHeight = fm.getAscent();
d = fm.getDescent();
if (clipx + clipw > 200 - (iconWidth / 2) && clipx < (200 + (iconWidth / 2))
&& clipy + cliph > (200 + (iconHeight / 4)) - iconHeight
&& clipy < (200 + (iconHeight / 4)) + d) {
g.drawString("and", 200 - (iconWidth / 2), 200 + (iconHeight / 4));
System.out.println(" and repainted.");
}
g.setFont(serifFont);
fm = g.getFontMetrics();
iconWidth = fm.stringWidth("Support.");
iconHeight = fm.getAscent();
d = fm.getDescent();
if (clipx + clipw > 280 - (iconWidth / 2) && clipx < (280 + (iconWidth / 2))
&& clipy + cliph > (280 + (iconHeight / 4)) - iconHeight
&& clipy < (280 + (iconHeight / 4)) + d) {
g.drawString("Support.", 280 - (iconWidth / 2), 280 + (iconHeight / 4));
System.out.println(" Support. repainted.");
}
}
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
public Dimension getMinimumSize() {
return getPreferredSize();
}
public static void main(String args[]) {
JFrame mainFrame = new JFrame();
mainFrame.getContentPane().add(new ClipDemo());
mainFrame.pack();
mainFrame.setVisible(true);
}
}
|