2013-08-20 3 views
5

Как рассчитать ширину String в пикселях в Java? Например, у меня есть строка «Hello World!». Какова его длина в пикселях, также учитывая его семейство и размер шрифта?Как вычислить ширину строки в пикселях?

+0

Ну, у вас есть специальный шрифт и размер шрифта в виду? – Matthias

+0

Это может быть произвольно любой. – user2550754

+0

Отредактировано ваше форматирование, чтобы удалить разметку кода для длины в частности. –

ответ

1

Есть несколько способов, чтобы добиться того, что вы хотите, основываясь на том, что именно вы хотите достичь, к примеру ...

BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); 
Graphics2D g2d = img.createGraphics(); 
FontMetrics fm = g2d.getFontMetrics(); 
System.out.println(fm.stringWidth("This is a simple test")); 
g2d.dispose(); 

Но это имеет только relevence для BufferedImage и это Graphics контекст, он не будет переводить обратно сказать, что-то вроде экрана или принтер.

Однако, если у вас есть контекст Graphics, вы можете добиться того же результата.

Этот пример, очевидно, использует шрифт по умолчанию, установленный для Graphics контекста, который можно изменить, если вам нужно ...

+0

У меня просто есть строка. Я знаю его длину, семейство шрифтов, размер шрифта. Я хочу рассчитать его размер в пикселях. – user2550754

+0

Хорошо, тогда вы можете использовать что-то вроде выше. Ширина и высота зависят от контекста «Graphics», который вы просматриваете. Хотя у вас есть семейство шрифтов, размер шрифта и текст, вам не хватает ключевого элемента – MadProgrammer

+0

+1, но TextLayout/SwingUtilities.computeStringWidth – mKorbel

4

Вкратце: вопрос зависит от используемой структуры. Например, если вы используете AWT, и имеют Graphics объект graphics и Font объект font вы можете сделать следующее:

FontMetrics metrics = graphics.getFontMetrics(font); 
int width = metrics.stringWidth("Hello world!"); 

Заканчивать this для получения дополнительной информации.

1

Вы можете попробовать что-то вроде этого

Graphics2D g2d = ... 
Font font = ... 
Rectangle2D r = font.getStringBounds("hello world!", g2d.getFontRenderContext()); 
System.out.println("(" + r.getWidth() + ", " + r.getHeight() + ")"); 

doc См этот, может помочь вам.

+0

Кажется, немного переоценено, учитывая, что вы можете использовать 'Graphics # getFontMetrics', но я дам вам голосование за то, что вы поменялись;) – MadProgrammer

0

Есть несколько способов сделать это, вы можете попробовать label.getElement().getClientWidth(); если текст находится в звукозаписывающей компании, если вы используете AWT вы можете использовать Graphics.getFontMetrics затем FontMetrics.stringWidth

0

Вы можете использовать FontMetrics. Класс FontMetrics определяет объект метрики шрифта, который инкапсулирует информацию об рендерингх конкретного шрифта на конкретном экране.

Вы можете сделать что-то вроде ниже

Font font = new Font("Verdana", Font.PLAIN, 10); 
    FontMetrics metrics = new FontMetrics(font) { 
    }; 
    Rectangle2D bounds = metrics.getStringBounds("Hello World!", null); 
    int widthInPixels = (int) bounds.getWidth(); 
+0

У меня очень хорошее чувство, что это не сработает. Размер пикселя зависит от контекста «Graphics», который вы передаете «null» для ... – MadProgrammer

+0

Не знаете, как перекрещивать проверку результата, но когда я его запустил, я получил 67 в качестве вывода для строки Hello World !. –

Смежные вопросы