| 
 import java.awt.Container;
 import java.awt.Font;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
 import java.awt.Point;
 import java.awt.font.FontRenderContext;
 import java.awt.font.LineBreakMeasurer;
 import java.awt.font.TextAttribute;
 import java.awt.font.TextLayout;
 import java.text.AttributedString;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
 import javax.swing.JComponent;
 import javax.swing.JFrame;
 
 
 
 public class MainClass {
 
 public static void main(String[] a) throws Exception {
 JFrame jf = new JFrame("Demo");
 Container cp = jf.getContentPane();
 TextFormat tl = new TextFormat();
 cp.add(tl);
 jf.setSize(300, 200);
 jf.setVisible(true);
 }
 }
 class TextFormat extends JComponent {
 List layouts;
 Font font = new Font("SansSerif", Font.BOLD, 42);
 String text = "The quick brown fox jumped over the lazy cow";
 
 public void paint(Graphics g) {
 if (layouts == null)
 getLayouts(g);
 
 Point pen = new Point(0, 0);
 Graphics2D g2d = (Graphics2D)g;
 g2d.setColor(java.awt.Color.black); // or a property
 g2d.setFont(font);
 
 Iterator it = layouts.iterator();
 while (it.hasNext()) {
 TextLayout layout = (TextLayout) it.next();
 pen.y += (layout.getAscent());
 g2d.setFont(font);
 layout.draw(g2d, pen.x, pen.y);
 pen.y += layout.getDescent();
 }
 }
 
 private void getLayouts(Graphics g) {
 layouts = new ArrayList();
 
 Graphics2D g2d = (Graphics2D) g;
 FontRenderContext frc = g2d.getFontRenderContext();
 
 AttributedString attrStr = new AttributedString(text);
 attrStr.addAttribute(TextAttribute.FONT, font, 0, text.length());
 LineBreakMeasurer measurer = new LineBreakMeasurer(
 attrStr.getIterator(), frc);
 float wrappingWidth;
 
 wrappingWidth = getSize().width - 15;
 
 while (measurer.getPosition() < text.length()) {
 TextLayout layout = measurer.nextLayout(wrappingWidth);
 layouts.add(layout);
 }
 }
 
 
 }
 
 
 |