Длина строки в пикселях в Java

Есть ли способ рассчитать длину строки в пикселях, учитывая определенную java.awt.Font объект, который не использует какие-либо компоненты GUI?

4 ответа

Решение

что не использует какие-либо компоненты 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 и дать вам информацию о размере шрифта.

Вы можете использовать Graphics2D Объект для получения границ шрифта (включая ширину):

Graphics2D g2d = ...
Font font = ...
Rectangle2D f = font.getStringBounds("hello world!", g2d.getFontRenderContext());

Но это зависит от того, как вы получите Graphics2D объект (например, из Image ).

Это дает вывод (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() + ")"); 

Мне нужно было получить длину и ширину строки до вызова paintComponent, чтобы я мог изменить размер охватывающей панели в соответствии с размерами текста. Ни один из этих методов не обеспечивал достаточную ширину, и у меня не было доступного объекта Graphics. Я решил проблему, установив шрифт «Моноширинный».

Другие вопросы по тегам