java下取得字符串像素宽度例子_JAVA下取得字符串像素寬度例子(再探討) | 學步園...

我在《JAVA下取得字符串像素寬度例子》中大體介紹了判斷和截取字符串的像素寬度,在使用的過程中發現了以下問題:

在windows下和在Linux下同樣的條件下取得的字串寬度不同(主要是針對半角),查了N多資料也沒有找到比較好的解決辦法。後來靈光一閃,是不是可以找一對字體使得在windows和linux下取得的像素寬度大致相同。經測試發現windows(XP)下使用Arial,Linux下使用Luxi Sans,絕大部分字符的寬度是相同的,只有下面幾個稍有差異。

○ AMVXYvxyz^    windows = linux - 1

○ ms                       windows = linux + 1

因此,如果server運行在Linux環境下,可以這樣解決之。

原來source中

private static Font f = new Font("Arial", Font.PLAIN, 12);

// 判斷是否是全角字符,半角使用英文字體,全角使用日文字體進行計算寬度

if (tmpChar.getBytes().length == 1) {

chr_width = fm.stringWidth(tmpChar);

} else {

chr_width = jpfm.stringWidth(tmpChar);

}

⇒            private static Font f = new Font("Luxi Sans", Font.PLAIN, 12);

// 判斷是否是全角字符,半角使用英文字體,全角使用日文字體進行計算寬度

if (tmpChar.getBytes().length == 1) {

chr_width = fm.stringWidth(tmpChar);

if("AMVXYvxyz^".indexOf(tmpChar) > 0) {

chr_width -= 1;

} else if("ms".indexOf(tmpChar) > 0) {

chr_width += 1;

}

} else {

chr_width = jpfm.stringWidth(tmpChar);

}

這樣Windows下和Linux下的差異就可解決了,雖然方法有點笨,但問題還是解決了。

如果有更好的方法,希望不吝賜教,共同進步。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值