我刚刚编写了一些代码来缩放字体以适应矩形(长度).它从18宽度开始并向下迭代直到它适合.
这似乎非常低效,但我找不到一种非循环方式来做到这一点.此行适用于可缩放的游戏网格中的标签,因此我无法看到解决方案(包裹,切断和延伸超过矩形都是不可接受的).
它实际上非常快,我正在为数百个矩形做这个,它的速度足以让它减慢触摸速度.
如果没有人提出更好的东西,我只会从表中加载起始猜测(因此它比18更接近)并使用它 - 除了延迟效果很好.
public Font scaleFont(String text, Rectangle rect, Graphics g, Font pFont) {
float nextTry=18.0f;
Font font=pFont;
while(x > 4) {
font=g.getFont().deriveFont(nextTry);
FontMetrics fm=g.getFontMetrics(font);
int width=fm.stringWidth(text);
if(width <= rect.width)
return font;
nextTry*=.9;
}
return font;
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种从宽度推断 Java AWT 字体大小的方法。例如,我知道我想在 100 像素内写出“hello world”。我知道我在 style 中使用字体“Times”,Font.PLAIN并且我想获得最适合我给定的 100 像素宽度的字体大小。
我知道我可以在循环中计算它(类似于while(font.getSize() < panel.getWidth()),但老实说,我觉得它不是很优雅。