<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2F2D_Graphics%2FTextLayout</id>
		<title>Java Tutorial/2D Graphics/TextLayout - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2F2D_Graphics%2FTextLayout"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/TextLayout&amp;action=history"/>
		<updated>2026-04-10T14:39:41Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/TextLayout&amp;diff=3516&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/TextLayout&amp;diff=3516&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:26Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 17:44, 31 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/TextLayout&amp;diff=3517&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/TextLayout&amp;diff=3517&amp;oldid=prev"/>
				<updated>2010-05-31T15:25:20Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  Drawing a Paragraph of Text ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.font.LineBreakMeasurer;&lt;br /&gt;
import java.awt.font.TextLayout;&lt;br /&gt;
import java.text.AttributedString;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class BasicShapes extends JPanel {&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    drawParagraph(g2d, &amp;quot;adfasdfaf&amp;quot;, 20);&lt;br /&gt;
  }&lt;br /&gt;
  void drawParagraph(Graphics2D g, String paragraph, float width) {&lt;br /&gt;
    LineBreakMeasurer linebreaker = new LineBreakMeasurer(new AttributedString(paragraph)&lt;br /&gt;
        .getIterator(), g.getFontRenderContext());&lt;br /&gt;
    float y = 0.0f;&lt;br /&gt;
    while (linebreaker.getPosition() &amp;lt; paragraph.length()) {&lt;br /&gt;
      TextLayout tl = linebreaker.nextLayout(width);&lt;br /&gt;
      y += tl.getAscent();&lt;br /&gt;
      tl.draw(g, 0, y);&lt;br /&gt;
      y += tl.getDescent() + tl.getLeading();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Basic Shapes&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.add(new BasicShapes());&lt;br /&gt;
    frame.setSize(350, 250);&lt;br /&gt;
    frame.setLocationRelativeTo(null);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Drawing Text with Mixed Styles ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.font.TextAttribute;&lt;br /&gt;
import java.awt.font.TextLayout;&lt;br /&gt;
import java.text.AttributedString;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class BasicShapes extends JPanel {&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    int x = 10, y = 10, start = 2, end = 4;&lt;br /&gt;
    AttributedString astr = new AttributedString(&amp;quot;aString&amp;quot;);&lt;br /&gt;
    astr.addAttribute(TextAttribute.FONT, new Font(&amp;quot;&amp;quot;, 1, 1), start, end);&lt;br /&gt;
    astr.addAttribute(TextAttribute.BACKGROUND, Color.red, start, end);&lt;br /&gt;
    // Draw mixed-style text&lt;br /&gt;
    TextLayout tl = new TextLayout(astr.getIterator(), g2d.getFontRenderContext());&lt;br /&gt;
    tl.draw(g2d, x, y);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Basic Shapes&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.add(new BasicShapes());&lt;br /&gt;
    frame.setSize(350, 250);&lt;br /&gt;
    frame.setLocationRelativeTo(null);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Draw text with TextLayout ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.font.FontRenderContext;&lt;br /&gt;
import java.awt.font.TextLayout;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class Main extends JPanel {&lt;br /&gt;
  public Main() {&lt;br /&gt;
    setBackground(Color.white);&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    Graphics2D g2D;&lt;br /&gt;
    g2D = (Graphics2D) g;&lt;br /&gt;
    g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
    g2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);&lt;br /&gt;
    FontRenderContext frc = g2D.getFontRenderContext();&lt;br /&gt;
    Font font1 = new Font(&amp;quot;Courier&amp;quot;, Font.BOLD, 24);&lt;br /&gt;
    String str1 = new String(&amp;quot;Java&amp;quot;);&lt;br /&gt;
    TextLayout tl = new TextLayout(str1, font1, frc);&lt;br /&gt;
    g2D.setColor(Color.gray);&lt;br /&gt;
    tl.draw(g2D, 50, 150);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String s[]) {&lt;br /&gt;
    JFrame frame1 = new JFrame(&amp;quot;2D Text&amp;quot;);&lt;br /&gt;
    frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame1.getContentPane().add(&amp;quot;Center&amp;quot;, new Main());&lt;br /&gt;
    frame1.pack();&lt;br /&gt;
    frame1.setSize(new Dimension(500, 300));&lt;br /&gt;
    frame1.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Getting the Shape from the Outline of Text ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.font.FontRenderContext;&lt;br /&gt;
import java.awt.font.TextLayout;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class BasicShapes extends JPanel {&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    getTextShape(g2d, &amp;quot;asdf&amp;quot;, new Font(&amp;quot;&amp;quot;, 1, 1));&lt;br /&gt;
  }&lt;br /&gt;
  public Shape getTextShape(Graphics2D g2d, String str, Font font) {&lt;br /&gt;
    FontRenderContext frc = g2d.getFontRenderContext();&lt;br /&gt;
    TextLayout tl = new TextLayout(str, font, frc);&lt;br /&gt;
    return tl.getOutline(null);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Basic Shapes&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.add(new BasicShapes());&lt;br /&gt;
    frame.setSize(350, 250);&lt;br /&gt;
    frame.setLocationRelativeTo(null);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Make your own animation from a series of images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.MediaTracker;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.Timer;&lt;br /&gt;
public class Main extends JPanel implements ActionListener {&lt;br /&gt;
  ImageIcon images[];&lt;br /&gt;
  int totalImages = 30, currentImage = 0, animationDelay = 50;&lt;br /&gt;
  Timer animationTimer;&lt;br /&gt;
  public Main() {&lt;br /&gt;
    images = new ImageIcon[totalImages];&lt;br /&gt;
    for (int i = 0; i &amp;lt; images.length; ++i)&lt;br /&gt;
      images[i] = new ImageIcon(&amp;quot;images/java&amp;quot; + i + &amp;quot;.gif&amp;quot;);&lt;br /&gt;
    startAnimation();&lt;br /&gt;
  }&lt;br /&gt;
  public void paintComponent(Graphics g) {&lt;br /&gt;
    super.paintComponent(g);&lt;br /&gt;
    if (images[currentImage].getImageLoadStatus() == MediaTracker.ruPLETE) {&lt;br /&gt;
      images[currentImage].paintIcon(this, g, 0, 0);&lt;br /&gt;
      currentImage = (currentImage + 1) % totalImages;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    repaint();&lt;br /&gt;
  }&lt;br /&gt;
  public void startAnimation() {&lt;br /&gt;
    if (animationTimer == null) {&lt;br /&gt;
      currentImage = 0;&lt;br /&gt;
      animationTimer = new Timer(animationDelay, this);&lt;br /&gt;
      animationTimer.start();&lt;br /&gt;
    } else if (!animationTimer.isRunning())&lt;br /&gt;
      animationTimer.restart();&lt;br /&gt;
  }&lt;br /&gt;
  public void stopAnimation() {&lt;br /&gt;
    animationTimer.stop();&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    Main anim = new Main();&lt;br /&gt;
    JFrame app = new JFrame(&amp;quot;Animator test&amp;quot;);&lt;br /&gt;
    app.add(anim, BorderLayout.CENTER);&lt;br /&gt;
    app.setSize(300,300);&lt;br /&gt;
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    app.setSize(anim.getPreferredSize().width + 10, anim.getPreferredSize().height + 30);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Styled Text ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Canvas;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.font.FontRenderContext;&lt;br /&gt;
import java.awt.font.TextLayout;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
public class Draw2DTextLayout extends JFrame {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    Draw2DTextLayout app = new Draw2DTextLayout();&lt;br /&gt;
  }&lt;br /&gt;
  public Draw2DTextLayout() {&lt;br /&gt;
    add(&amp;quot;Center&amp;quot;, new MyCanvas());&lt;br /&gt;
    setSize(400, 400);&lt;br /&gt;
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  class MyCanvas extends Canvas {&lt;br /&gt;
    public void paint(Graphics graphics) {&lt;br /&gt;
      Graphics2D g = (Graphics2D) graphics;&lt;br /&gt;
      FontRenderContext frc = g.getFontRenderContext();&lt;br /&gt;
      TextLayout[] s = new TextLayout[3];&lt;br /&gt;
      Font f1 = new Font(&amp;quot;Helvetica&amp;quot;, Font.BOLD, 24);&lt;br /&gt;
      Font f2 = new Font(&amp;quot;TimesRoman&amp;quot;, Font.ITALIC, 14);&lt;br /&gt;
      Font f3 = new Font(&amp;quot;Helvetica&amp;quot;, Font.PLAIN, 12);&lt;br /&gt;
      s[0] = new TextLayout(&amp;quot;This is the first sentence.&amp;quot;, f1, frc);&lt;br /&gt;
      s[1] = new TextLayout(&amp;quot;This is the second sentence.&amp;quot;, f2, frc);&lt;br /&gt;
      s[2] = new TextLayout(&amp;quot;This is the third sentence.&amp;quot;, f3, frc);&lt;br /&gt;
      int yOffset = 0;&lt;br /&gt;
      for (int i = 0; i &amp;lt; s.length; ++i) {&lt;br /&gt;
        s[i].draw(g, 100, 100 + yOffset);&lt;br /&gt;
        yOffset += s[i].getAscent() + s[i].getDescent() + s[i].getLeading();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Text Layout with mouse clicking and selecting action ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.event.MouseAdapter;&lt;br /&gt;
import java.awt.event.MouseEvent;&lt;br /&gt;
import java.awt.event.MouseMotionAdapter;&lt;br /&gt;
import java.awt.font.FontRenderContext;&lt;br /&gt;
import java.awt.font.TextHitInfo;&lt;br /&gt;
import java.awt.font.TextLayout;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
import java.awt.geom.Rectangle2D;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class TextLayoutWithMouseClickDrag{&lt;br /&gt;
  public static void main(String arg[]) {&lt;br /&gt;
    JFrame frame = new JFrame();&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.getContentPane().add(&amp;quot;Center&amp;quot;, new DisplayPanel());&lt;br /&gt;
    frame.pack();&lt;br /&gt;
    frame.setSize(new Dimension(400, 300));&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class DisplayPanel extends JPanel {&lt;br /&gt;
  FontRenderContext frc = new FontRenderContext(null, false, false);&lt;br /&gt;
  Font font = new Font(&amp;quot;Arial&amp;quot;, Font.PLAIN, 36);&lt;br /&gt;
  Rectangle2D rect;&lt;br /&gt;
  float rx, ry, rw, rh;&lt;br /&gt;
  TextHitInfo hitInfo;&lt;br /&gt;
  Color caretColor;&lt;br /&gt;
  int hit1, hit2;&lt;br /&gt;
  int w=400, h=200;&lt;br /&gt;
  TextLayout layout = new TextLayout(&amp;quot;j a v a 2 s . c o m&amp;quot;, font, frc);&lt;br /&gt;
  public DisplayPanel() {&lt;br /&gt;
    setSize(400, 200);&lt;br /&gt;
    addMouseListener(new MouseHandler());&lt;br /&gt;
    addMouseMotionListener(new MouseMotionHandler());&lt;br /&gt;
    rx = (float) (w / 2 - layout.getBounds().getWidth() / 2);&lt;br /&gt;
    ry = (float) 3 * h / 4;&lt;br /&gt;
    rw = (float) (layout.getBounds().getWidth());&lt;br /&gt;
    rh = (float) (layout.getBounds().getHeight());&lt;br /&gt;
    rect = new Rectangle2D.Float(rx, ry, rw, rh);&lt;br /&gt;
  }&lt;br /&gt;
  public void update(Graphics g) {&lt;br /&gt;
    g.clearRect(0, 0, getWidth(), getHeight());&lt;br /&gt;
    paintComponent(g);&lt;br /&gt;
  }&lt;br /&gt;
  public void paintComponent(Graphics g) {&lt;br /&gt;
    super.paintComponent(g);&lt;br /&gt;
    Graphics2D g2 = (Graphics2D) g;&lt;br /&gt;
    AffineTransform at = AffineTransform.getTranslateInstance(rx, ry);&lt;br /&gt;
    Shape hilight = layout.getLogicalHighlightShape(hit1, hit2);&lt;br /&gt;
    hilight = at.createTransformedShape(hilight);&lt;br /&gt;
    g2.setColor(Color.lightGray);&lt;br /&gt;
    g2.fill(hilight);&lt;br /&gt;
    g2.setColor(Color.black);&lt;br /&gt;
    layout.draw(g2, rx, ry);&lt;br /&gt;
    Shape[] caretShapes = layout.getCaretShapes(hit1);&lt;br /&gt;
    Shape caret = at.createTransformedShape(caretShapes[0]);&lt;br /&gt;
    g2.setColor(caretColor);&lt;br /&gt;
    g2.draw(caret);&lt;br /&gt;
  }&lt;br /&gt;
  public int getHitLocation(int mouseX, int mouseY) {&lt;br /&gt;
    hitInfo = layout.hitTestChar(mouseX, mouseY, rect);&lt;br /&gt;
    return hitInfo.getInsertionIndex();&lt;br /&gt;
  }&lt;br /&gt;
  class MouseHandler extends MouseAdapter {&lt;br /&gt;
    public void mouseClicked(MouseEvent e) {&lt;br /&gt;
      caretColor = getForeground();&lt;br /&gt;
      hit1 = getHitLocation(e.getX(), e.getY());&lt;br /&gt;
      hit2 = hit1;&lt;br /&gt;
      repaint();&lt;br /&gt;
    }&lt;br /&gt;
    public void mousePressed(MouseEvent e) {&lt;br /&gt;
      caretColor = getForeground();&lt;br /&gt;
      hit1 = getHitLocation(e.getX(), e.getY());&lt;br /&gt;
      hit2 = hit1;&lt;br /&gt;
      repaint();&lt;br /&gt;
    }&lt;br /&gt;
    public void mouseReleased(MouseEvent e) {&lt;br /&gt;
      hit2 = getHitLocation(e.getX(), e.getY());&lt;br /&gt;
      repaint();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  class MouseMotionHandler extends MouseMotionAdapter {&lt;br /&gt;
    public void mouseDragged(MouseEvent e) {&lt;br /&gt;
      caretColor = getBackground();&lt;br /&gt;
      hit2 = getHitLocation(e.getX(), e.getY());&lt;br /&gt;
      repaint();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>