AttributesApp.java Source code

Java tutorial

Introduction

Here is the source code for AttributesApp.java

Source

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.font.FontRenderContext;
import java.awt.font.GraphicAttribute;
import java.awt.font.ImageGraphicAttribute;
import java.awt.font.ShapeGraphicAttribute;
import java.awt.font.TextAttribute;
import java.awt.font.TextLayout;
import java.awt.geom.GeneralPath;
import java.awt.image.BufferedImage;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;

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

public class AttributesApp extends JPanel {
    String text = "Java Source and Support";

    AttributedString attribString;

    AttributedCharacterIterator attribCharIterator;

    Image image;

    public static void main(String arg[]) {
        JFrame frame = new JFrame();
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        frame.getContentPane().add("Center", new AttributesApp());
        frame.setSize(500, 200);
        frame.setVisible(true);
    }

    public AttributesApp() {
        setBackground(Color.lightGray);
        setSize(500, 200);

        attribString = new AttributedString(text);

        GeneralPath star = new GeneralPath();
        star.moveTo(0, 0);
        star.lineTo(10, 30);
        star.lineTo(-10, 10);
        star.lineTo(10, 10);
        star.lineTo(-10, 30);
        star.closePath();
        GraphicAttribute starShapeAttr = new ShapeGraphicAttribute(star, GraphicAttribute.TOP_ALIGNMENT, false);
        attribString.addAttribute(TextAttribute.CHAR_REPLACEMENT, starShapeAttr, 0, 1);
        attribString.addAttribute(TextAttribute.FOREGROUND, new Color(255, 255, 0), 0, 1);

        int index = text.indexOf("Java Source");
        attribString.addAttribute(TextAttribute.FOREGROUND, Color.blue, index, index + 7);
        Font font = new Font("sanserif", Font.ITALIC, 40);
        attribString.addAttribute(TextAttribute.FONT, font, index, index + 7);

        loadImage();
        BufferedImage bimage = new BufferedImage(image.getWidth(this), image.getHeight(this),
                BufferedImage.TYPE_INT_ARGB);
        Graphics2D big = bimage.createGraphics();
        big.drawImage(image, null, this);
        GraphicAttribute javaImageAttr = new ImageGraphicAttribute(bimage, GraphicAttribute.TOP_ALIGNMENT, 0, 0);

        index = text.indexOf("Java");
        attribString.addAttribute(TextAttribute.CHAR_REPLACEMENT, javaImageAttr, index - 1, index);

        font = new Font("serif", Font.BOLD, 60);
        attribString.addAttribute(TextAttribute.FONT, font, index, index + 4);
        attribString.addAttribute(TextAttribute.FOREGROUND, new Color(243, 63, 163), index, index + 4); // Start and end indexes.

        index = text.indexOf("source");
        attribString.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON, index, index + 2);

        index = text.indexOf("and support");
        font = new Font("sanserif", Font.ITALIC, 40);
        attribString.addAttribute(TextAttribute.FONT, font, index, index + 10);

        attribString.addAttribute(TextAttribute.FOREGROUND, Color.white, index, index + 2); // Start and end indexes.
        attribString.addAttribute(TextAttribute.FOREGROUND, Color.blue, index + 3, index + 10); // Start and end indexes.
    }

    public void loadImage() {
        image = Toolkit.getDefaultToolkit().getImage("largeJava2sLogo.gif");
        MediaTracker mt = new MediaTracker(this);
        mt.addImage(image, 1);
        try {
            mt.waitForAll();
        } catch (Exception e) {
            System.out.println("Exception while loading.");
        }

        if (image.getWidth(this) == -1) {
            System.out.println("no images");
            System.exit(0);
        }
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;

        attribCharIterator = attribString.getIterator();

        FontRenderContext frc = new FontRenderContext(null, false, false);
        TextLayout layout = new TextLayout(attribCharIterator, frc);

        layout.draw(g2, 20, 100);
    }
}