AntiAlias.java Source code

Java tutorial

Introduction

Here is the source code for AntiAlias.java

Source

/*
 * Copyright (c) 2000 David Flanagan.  All rights reserved.
 * This code is from the book Java Examples in a Nutshell, 2nd Edition.
 * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.
 * You may study, use, and modify it for any non-commercial purpose.
 * You may distribute it non-commercially as long as you retain this notice.
 * For a commercial use license, or to purchase the book (recommended),
 * visit http://www.davidflanagan.com/javaexamples2.
 */

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JPanel;

/** A demonstration of anti-aliasing */
public class AntiAlias extends JPanel {
    static final int WIDTH = 650, HEIGHT = 350; // Size of our example

    public String getName() {
        return "AntiAliasing";
    }

    public int getWidth() {
        return WIDTH;
    }

    public int getHeight() {
        return HEIGHT;
    }

    /** Draw the example */
    public void paint(Graphics g1) {
        Graphics2D g = (Graphics2D) g1;
        BufferedImage image = // Create an off-screen image
                new BufferedImage(65, 35, BufferedImage.TYPE_INT_RGB);
        Graphics2D ig = image.createGraphics(); // Get its Graphics for drawing

        // Set the background to a gradient fill. The varying color of
        // the background helps to demonstrate the anti-aliasing effect
        ig.setPaint(new GradientPaint(0, 0, Color.black, 65, 35, Color.white));
        ig.fillRect(0, 0, 65, 35);

        // Set drawing attributes for the foreground.
        // Most importantly, turn on anti-aliasing.
        ig.setStroke(new BasicStroke(2.0f)); // 2-pixel lines
        ig.setFont(new Font("Serif", Font.BOLD, 18)); // 18-point font
        ig.setRenderingHint(RenderingHints.KEY_ANTIALIASING, // Anti-alias!
                RenderingHints.VALUE_ANTIALIAS_ON);

        // Now draw pure blue text and a pure red oval
        ig.setColor(Color.blue);
        ig.drawString("Java", 9, 22);
        ig.setColor(Color.red);
        ig.drawOval(1, 1, 62, 32);

        // Finally, scale the image by a factor of 10 and display it
        // in the window. This will allow us to see the anti-aliased pixels
        g.drawImage(image, AffineTransform.getScaleInstance(10, 10), this);

        // Draw the image one more time at its original size, for comparison
        g.drawImage(image, 0, 0, this);
    }

    public static void main(String[] a) {
        JFrame f = new JFrame();
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        f.setContentPane(new AntiAlias());
        f.setSize(400, 400);
        f.setVisible(true);
    }

}