Java by API/java.text/AttributedString

Материал из Java эксперт
Перейти к: навигация, поиск

AttributedString: addAttribute(Attribute attribute, Object value, int beginIndex, int endIndex)

   <source lang="java">

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

}

      </source>
   
  
 
  



new AttributedString(String text)

   <source lang="java">

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

}

      </source>