Есть ли способ вычислить длину строки в пикселях, учитывая определенный объект java.awt.Font
, который не использует какие-либо компоненты графического интерфейса?
Длина строки в пикселях в Java
Ответ 1
который не использует какие-либо компоненты GUI?
Это зависит от того, что вы имеете в виду здесь. Я предполагаю, что вы хотите, чтобы вы сделали это, не получив HeadlessException
.
Лучший способ - с BufferedImage
. AFAIK, это не вызовет HeadlessException
:
Font font = ... ;
BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
FontMetrics fm = img.getGraphics().getFontMetrics(font);
int width = fm.stringWidth("Your string");
Помимо использования чего-то подобного, я не думаю, что вы можете. Для создания FontMetrics
вам понадобится графический контекст и укажите информацию о размере шрифта.
Ответ 2
Вы можете использовать объект Graphics2D
для получения границ шрифта (включая ширину):
Graphics2D g2d = ...
Font font = ...
Rectangle2D f = font.getStringBounds("hello world!", g2d.getFontRenderContext());
Но это зависит от того, как вы получите объект Graphics2D
(например, из Image
).
Ответ 3
Это дает результат для (137.0, 15.09375) для меня. Я понятия не имею, что такое единицы, но он, безусловно, выглядит пропорционально правильным и не использует Graphics2D напрямую.
Font f = new Font("Ariel", Font.PLAIN, 12);
Rectangle2D r = f.getStringBounds("Hello World! Hello World!", new FontRenderContext(null, RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT, RenderingHints.VALUE_FRACTIONALMETRICS_DEFAULT));
System.out.println("(" + r.getWidth() + ", " + r.getHeight() + ")");