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

今天要谈的是如何在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);
		}
	}

}

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

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

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

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


原始间距:



1.2倍间距:



0.9倍间距:



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

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值