MainClass.java Source code

Java tutorial

Introduction

Here is the source code for MainClass.java

Source

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

}