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、付费专栏及课程。

余额充值