ClipDemo.java Source code

Java tutorial

Introduction

Here is the source code for ClipDemo.java

Source

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);
    }

}