Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

Set Text Attribute

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("largerntsoftLogo.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);   } }