今天要谈的是如何在Java中调整字距与行距,当然,这里谈的主要是针对swing与awt里的字距与行距。
调整字距与行距看起来似乎是个很简单的问题,大概可以直接调用某个内置的方法来操作,紫雾我最开始也是这么觉得的,但找了一圈也没发现相关方法,没办法,自己写吧,毕竟也不难。
其实调整字距的方法有很多种,本文介绍其中一种,即直接指定每个字符的初始位置,从而自由调控字距与行距。其实实现手段还有很多种,我过些天应该还会再写一篇文章介绍其他方法,所以这篇文章也就算是“其一”了。
废话不多说了,直接上代码。
- 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);
- }
- }
- }
需要注意的是,由于使用了不同的绘制文字方法,所以这里的文字居中方案也要有所调整,上面程序里面给了一种解决方案,供参考。
上述程序虽然只做了字距调整,但实际上调整行距也是一样的道理,只要改tempy就行了,这里不再赘述。
最后,口说无凭,上个效果图大家感受一下。
原始间距:
1.2倍间距:
0.9倍间距:
额,这里说点无关的。记得最开始学java的时候就听说过java不擅长处理图像,现在渐渐感觉到了。
来源:http://blog.csdn.net/zixiaomuwu/article/details/51068698