Mega Code Archive

 
Categories / Java by API / Java Awt Font
 

TextLayout

import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.font.FontRenderContext; import java.awt.font.LineBreakMeasurer; import java.awt.font.TextAttribute; import java.awt.font.TextLayout; import java.text.AttributedCharacterIterator; import java.text.AttributedString; import java.util.Hashtable; import javax.swing.JFrame; import javax.swing.JPanel; public class MainClass {   public static void main(String[] args) {     JFrame f = new JFrame();     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     Container c = f.getContentPane();     c.add(new Justify());     f.pack();     f.setVisible(true);   } } class Justify extends JPanel {   final static int LEFT = 0;   final static int RIGHT = 1;   final static int CENTER = 2;   final static int EQUALITY = 3;   int justify = EQUALITY;   public void paint(Graphics g) {     Dimension size = getSize();     String s = "To rntsoft.com or not to rntsoft.com, that is a question";     Hashtable map = new Hashtable();     map.put(TextAttribute.SIZE, new Float(32.0f));     AttributedString as = new AttributedString(s, map);     map = new Hashtable();     map.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);     as.addAttributes(map, 33, 52);     AttributedCharacterIterator aci = as.getIterator();     int startIndex = aci.getBeginIndex();     int endIndex = aci.getEndIndex();     LineBreakMeasurer measurer;     measurer = new LineBreakMeasurer(aci, new FontRenderContext(null, false, false));     measurer.setPosition(startIndex);     float wrappingWidth = (float) size.width;     float Y = 0.0f;     while (measurer.getPosition() < endIndex) {       TextLayout layout = measurer.nextLayout(wrappingWidth);       Y += layout.getAscent();       float X = 0.0f;       switch (justify) {       case LEFT:         if (layout.isLeftToRight())           X = 0.0f;         else           X = wrappingWidth - layout.getAdvance();         break;       case RIGHT:         if (layout.isLeftToRight())           X = wrappingWidth - layout.getVisibleAdvance();         else           X = wrappingWidth;         break;       case CENTER:         if (layout.isLeftToRight())           X = (wrappingWidth - layout.getVisibleAdvance()) / 2;         else           X = (wrappingWidth + layout.getAdvance()) / 2 - layout.getAdvance();         break;       case EQUALITY:         layout = layout.getJustifiedLayout(wrappingWidth);       }       layout.draw((Graphics2D) g, X, Y);       Y += layout.getDescent() + layout.getLeading();     }   } }