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