В настоящее время мы пытаемся получить ширину строки, отображаемой произвольным шрифтом.
BufferedImage img = new BufferedImage(10, 10, BufferedImage.TRANSLUCENT);
img.createGraphics();
Graphics2D g = (Graphics2D) img.getGraphics();
g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
FontMetrics metrics = g.getFontMetrics(font);
// get the height of a line of text in this font and render context
int hgt = metrics.getHeight();
// get the advance of my text in this font and render context
int adv = metrics.stringWidth(text);
// calculate the size of a box to hold the text with some padding.
//Dimension dim = new Dimension(adv + 2, hgt + 2);
Проблема с этой строкой ...
int adv = metrics.stringWidth(text);
Для большинства шрифтов это работает, но для некоторых причудливых шрифтов сценариев кажется, что они оказываются менее широкими, чем мы ожидали. В соответствии с Javadoc для FontMetrics.stringWidth вы даже можете прочитать ...
Возвращает общую ширину продвижения для отображения указанной строки в
этот шрифт. Прогресс - это расстояние от крайней левой точки до
крайняя правая точка на базовой линии Обратите внимание, что продвижение
Строка не обязательно является суммой достижений ее символов .