⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 justify.java

📁 java 完全探索的随书源码
💻 JAVA
字号:
// Justify.java

import java.awt.*;
import java.awt.font.*;

import java.text.*;

import java.util.*;

public class Justify extends java.applet.Applet
{
   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 plagiarize or not to plagiarize William " +
                 "Shakespeare, that is the question!  Whether " +
                 "'tis nobler in the mind to suffer the lack of " +
                 "ideas for a decent paragraph, or to take arms " +
                 "against Mr. Shakespeare by plagiarizing his work " +
                 "... 'tis a consummation devoutly to be wished!";

      Hashtable map = new Hashtable ();
      map.put (TextAttribute.SIZE, new Float (18.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 ();
      }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -