java 字体宽度_Java字体大小从宽度

我正在寻找一种从宽度推断Java AWT字体大小的方法.例如,我知道我想在100像素内写’hello world’.我知道我在Font.PLAIN风格中使用字体“Times”,我希望得到最适合我的100像素宽度的字体大小.

我知道我可以在一个循环中计算它(类似于while(font.getSize()< panel.getWidth()),但说实话我并不觉得它非常优雅.

解决方法:

您可以使用FontMetrics类获取字符串的渲染宽度和高度(确保在Graphics2D实例中启用小数字体度量以避免舍入错误):

Graphics2D g = ...;

g.setRenderingHint(

RenderingHints.KEY_FRACTIONALMETRICS,

RenderingHints.VALUE_FRACTIONALMETRICS_ON);

Font font = Font.decode("Times New Roman");

String text = "Foo";

Rectangle2D r2d = g.getFontMetrics(font).getStringBounds(text, g);

现在,当您使用具有默认(或实际上任何)大小的字体来获得文本的宽度时,您可以缩放字体,以便文本适合指定的宽度,例如, 100像素:

font = font.deriveFont((float)(font.getSize2D() * 100/r2d.getWidth()));

同样,您可能必须限制字体大小,以便不超过可用的面板高度.

要改善渲染文本的外观,还应考虑在字体中启用文本渲染和/或字距调整支持的抗锯齿:

g.setRenderingHint(

RenderingHints.KEY_TEXT_ANTIALIASING,

RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

Map atts = new HashMap();

atts.put(TextAttribute.KERNING, TextAttribute.KERNING_ON);

font = font.deriveFont(atts);

标签:java,fonts,awt

来源: https://codeday.me/bug/20190620/1245909.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值