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