Java中调整字距与行距的方法 其一(以DrawString为例)

今天要谈的是如何在Java中调整字距与行距,当然,这里谈的主要是针对swing与awt里的字距与行距。

调整字距与行距看起来似乎是个很简单的问题,大概可以直接调用某个内置的方法来操作,紫雾我最开始也是这么觉得的,但找了一圈也没发现相关方法,没办法,自己写吧,毕竟也不难。

其实调整字距的方法有很多种,本文介绍其中一种,即直接指定每个字符的初始位置,从而自由调控字距与行距。其实实现手段还有很多种,我过些天应该还会再写一篇文章介绍其他方法,所以这篇文章也就算是“其一”了。

废话不多说了,直接上代码。

[java] view plain copy

import java.awt.*;  
import java.awt.image.*;  
import java.io.*;  
import javax.imageio.*;  


public class demo1_NewDraw{  

    public static void main(String[] args) throws Exception{  
        int width=150;  
        int height=30;  
        String out=new String("今夕是何年?");  
        double rate=0.90;  

        BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);  
        Graphics g=image.getGraphics();//创建画笔  
        g.setColor(new Color(200,192,184));//背景颜色  
        g.fill3DRect(0, 0, width, height, true);//背景  
        g.setColor(Color.BLACK);//文字颜色  
        g.setFont(new Font("宋体",Font.BOLD,20));//设置字体  

        //居中显示  
        int x=(int)(width/2-rate*g.getFontMetrics().stringWidth(out)/2);  
        int y=height/2+g.getFontMetrics().getHeight()/3;  

        MyDrawString(out, x, y, rate, g);  

        ImageIO.write(image, "png", new File("d:/2.png"));  
    }     

    public static void MyDrawString(String str,int x,int y,double rate,Graphics g){  
        String tempStr=new String();  
        int orgStringWight=g.getFontMetrics().stringWidth(str);  
        int orgStringLength=str.length();  
        int tempx=x;  
        int tempy=y;  
        while(str.length()>0)  
        {  
            tempStr=str.substring(0, 1);  
            str=str.substring(1, str.length());  
            g.drawString(tempStr, tempx, tempy);  
            tempx=(int)(tempx+(double)orgStringWight/(double)orgStringLength*rate);  
        }  
    }  

}  

核心部分就是那个MyDrawString,也就是我自己写的可以自由控制字间距的DrawSting。该函数和java固有的DrawString一样,参数依次为“要输出的字符串”、“x坐标”、“y坐标”,后面的rate是一个double类型,表示此次绘制的字间距是默认字间距的多少倍,g是画笔。

需要注意的是,由于使用了不同的绘制文字方法,所以这里的文字居中方案也要有所调整,上面程序里面给了一种解决方案,供参考。

上述程序虽然只做了字距调整,但实际上调整行距也是一样的道理,只要改tempy就行了,这里不再赘述。

最后,口说无凭,上个效果图大家感受一下。

原始间距:

1.2倍间距:

0.9倍间距:

额,这里说点无关的。记得最开始学java的时候就听说过java不擅长处理图像,现在渐渐感觉到了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值