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

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

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

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

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

  1. import java.awt.*;  
  2. import java.awt.image.*;  
  3. import java.io.*;  
  4. import javax.imageio.*;  
  5.   
  6.   
  7. public class demo1_NewDraw{  
  8.   
  9.     public static void main(String[] args) throws Exception{  
  10.         int width=150;  
  11.         int height=30;  
  12.         String out=new String("今夕是何年?");  
  13.         double rate=0.90;  
  14.           
  15.         BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);  
  16.         Graphics g=image.getGraphics();//创建画笔  
  17.         g.setColor(new Color(200,192,184));//背景颜色  
  18.         g.fill3DRect(00, width, height, true);//背景  
  19.         g.setColor(Color.BLACK);//文字颜色  
  20.         g.setFont(new Font("宋体",Font.BOLD,20));//设置字体  
  21.           
  22.         //居中显示  
  23.         int x=(int)(width/2-rate*g.getFontMetrics().stringWidth(out)/2);  
  24.         int y=height/2+g.getFontMetrics().getHeight()/3;  
  25.   
  26.         MyDrawString(out, x, y, rate, g);  
  27.           
  28.         ImageIO.write(image, "png"new File("d:/2.png"));  
  29.     }     
  30.       
  31.     public static void MyDrawString(String str,int x,int y,double rate,Graphics g){  
  32.         String tempStr=new String();  
  33.         int orgStringWight=g.getFontMetrics().stringWidth(str);  
  34.         int orgStringLength=str.length();  
  35.         int tempx=x;  
  36.         int tempy=y;  
  37.         while(str.length()>0)  
  38.         {  
  39.             tempStr=str.substring(01);  
  40.             str=str.substring(1, str.length());  
  41.             g.drawString(tempStr, tempx, tempy);  
  42.             tempx=(int)(tempx+(double)orgStringWight/(double)orgStringLength*rate);  
  43.         }  
  44.     }  
  45.   
核心部分就是那个MyDrawString,也就是我自己写的可以自由控制字间距的DrawSting。该函数和java固有的DrawString一样,参数依次为“要输出的字符串”、“x坐标”、“y坐标”,后面的rate是一个double类型,表示此次绘制的字间距是默认字间距的多少倍,g是画笔。

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

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

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


原始间距:


1.2倍间距:


0.9倍间距:


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


来源:http://blog.csdn.net/zixiaomuwu/article/details/51068698



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值