需要一种缩放字体以适合矩形的方法

Bil*_*l K 13 java graphics fonts awt

我刚刚编写了一些代码来缩放字体以适应矩形(长度).它从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)

Luk*_*fer 20

半假代码:

public Font scaleFont(String text, Rectangle rect, Graphics g, Font pFont) {
    float fontSize = 20.0f;
    Font font = pFont;

    font = g.getFont().deriveFont(fontSize);
    int width = g.getFontMetrics(font).stringWidth(text);
    fontSize = (rect.width / width ) * fontSize;
    return g.getFont().deriveFont(fontSize);
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么你传递pFont,因为它没有使用...