OFFICE技术讲座:JDK绘制旋转字体的效果(水平)

简介: OFFICE技术讲座:JDK绘制旋转字体的效果(水平)
  • 效果图100%

1.png

  • 效果图300%2.png
  • 测试源码-RotateFontFrameAbstract
package taishan;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.font.TextAttribute;
import java.awt.geom.AffineTransform;
import java.util.HashMap;
@SuppressWarnings("serial")
public abstract class RotateFontFrameAbstract extends TFrame
{
    protected final static String FONT_NAME  = "宋体";
    protected final static int    FONT_SIZE  = 16;
    protected final static int    POS_OFFSET = 100;
    protected final static Color COLOR_LINE = Color.BLUE;
    protected final static Color COLOR_FONT = Color.BLACK;
    protected final static char[] TAISHAN = "泰山一!Office-!".toCharArray();
    protected final static AffineTransform ROTATE_0   = AffineTransform.getRotateInstance( 0);
    protected final static AffineTransform ROTATE_90  = AffineTransform.getRotateInstance( Math.PI / 2);
    protected final static AffineTransform ROTATE_180 = AffineTransform.getRotateInstance( Math.PI   );
    protected final static AffineTransform ROTATE_270 = AffineTransform.getRotateInstance( Math.PI *1.5);
    protected Font[] rotateFonts = new Font[4];
  protected abstract void drawRotateFonts(Graphics g);
  public RotateFontFrameAbstract()
  {
      this.getContentPane().setBackground(Color.WHITE);
      HashMap<TextAttribute, Object> attrs = new HashMap<TextAttribute, Object>();
      attrs.put(TextAttribute.FAMILY,         FONT_NAME);
      attrs.put(TextAttribute.SIZE,           FONT_SIZE);
      Font temp = new Font(attrs);
      rotateFonts[0] = temp.deriveFont(ROTATE_0);
      rotateFonts[1] = temp.deriveFont(ROTATE_90);
      rotateFonts[2] = temp.deriveFont(ROTATE_180);
      rotateFonts[3] = temp.deriveFont(ROTATE_270);
  }
  protected final void antiAliasing(Graphics2D g2d)
  {
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,   RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,   RenderingHints.VALUE_FRACTIONALMETRICS_ON);
  }
  @Override
    public final void paint(Graphics g)
    {
    super.paint(g);
    drawRotateFonts(g);
    }
}
  • 测试源码-RotateFontFrameHorizental
package taishan;
import java.awt.Graphics;
@SuppressWarnings("serial")
public class RotateFontFrameHorizental extends RotateFontFrameAbstract
{
  @Override
  protected void drawRotateFonts(Graphics g)
  {
    antiAliasing((java.awt.Graphics2D)g);
    int xunit = 20;
    int yunit = 50;
    g.setColor(COLOR_LINE);
    g.drawLine(POS_OFFSET, POS_OFFSET, POS_OFFSET, POS_OFFSET+200);
    for (int i=0; i<rotateFonts.length; i++)
    {
      if (rotateFonts[i] == null)
      {
        continue;
      }
        int y = POS_OFFSET+yunit*i + 30;
        g.setColor(COLOR_LINE);
        g.drawLine(POS_OFFSET, y, POS_OFFSET+250, y);
        g.setFont(rotateFonts[i]);
        for (int j=0; j<TAISHAN.length; j++)
        {
          int x = POS_OFFSET+xunit*j;
          g.setColor(COLOR_FONT);
          g.drawChars(TAISHAN, j, 1, x, y);         
        }
    }
  }
  public static void main(String[] args)
    {
    RotateFontFrameHorizental frame = new RotateFontFrameHorizental();
        frame.setSize(600, 600);
        frame.setVisible(true);
    }
}
目录
相关文章
|
3月前
|
C# 开发者 Windows
WPF遇上Office:一场关于Word与Excel自动化操作的技术盛宴,从环境搭建到代码实战,看WPF如何玩转文档处理的那些事儿
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的重要组件,以其强大的图形界面和灵活的数据绑定功能著称。本文通过具体示例代码,介绍如何在 WPF 应用中实现 Word 和 Excel 文档的自动化操作,包括文档的读取、编辑和保存等。首先创建 WPF 项目并设计用户界面,然后在 `MainWindow.xaml.cs` 中编写逻辑代码,利用 `Microsoft.Office.Interop` 命名空间实现 Office 文档的自动化处理。文章还提供了注意事项,帮助开发者避免常见问题。
240 0
|
6月前
剑指Office-旋转数组的最小数
剑指Office-旋转数组的最小数
44 0
|
人工智能 自然语言处理 Oracle
WAIC 2023 | 微软Office产品团队技术负责人蔡玮鑫:Copilot中大语言模型应用实践经验
WAIC 2023 | 微软Office产品团队技术负责人蔡玮鑫:Copilot中大语言模型应用实践经验
148 0
|
Java 索引
全网首发:JDK/Java对于TTC字体文件的支持研究
全网首发:JDK/Java对于TTC字体文件的支持研究
413 0
全网首发:JDK/Java对于TTC字体文件的支持研究
OFFICE技术讲座:边框相邻时的处理
OFFICE技术讲座:边框相邻时的处理
65 0
OFFICE技术讲座:边框相邻时的处理
|
Java
关于JDK支持TTC字体文件的问题及解决办法,已上报JAVA
关于JDK支持TTC字体文件的问题及解决办法,已上报JAVA
155 0
|
Java
JDK:字体大小是如何生效的
JDK:字体大小是如何生效的
122 0
|
Java
JDK本身是支持浮点字体的
JDK本身是支持浮点字体的
60 0
|
Java
JDK中字体的高度信息ascent/descent/leading是怎么计算的
JDK中字体的高度信息ascent/descent/leading是怎么计算的
157 0
|
Java 索引
关于JDK/Java支持TTC字体的思路
关于JDK/Java支持TTC字体的思路
135 0