Я просто написал код для масштабирования шрифта, чтобы он соответствовал (длине) прямоугольника. Он начинается с ширины 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;
}