2012-11-12 14 views
12

Czy istnieje sposób obliczania długości łańcucha w pikselach, biorąc pod uwagę pewien obiekt java.awt.Font, który nie korzysta z żadnych komponentów GUI?Długość łańcucha w pikselach w języku Java

+0

Czy to dla czcionki Czcionki? – Link19

+0

Zobacz także [tę odpowiedź] (http://stackoverflow.com/questions/6295084/cut-out-image-in-shape-of-text/6296381#6296381) dla używania 'GlyphVector'. Umieszcza ostateczny obraz w GUI, ale tylko po to, żeby go wyświetlić. –

Odpowiedz

10

który nie korzysta z żadnych komponentów GUI?

To zależy od tego, co masz na myśli. Zakładam, że masz na myśli, że chcesz to zrobić bez otrzymania HeadlessException.

Najlepszy sposób jest z BufferedImage. AFAIK, to nie rzuci 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"); 

Inny niż przy użyciu czegoś takiego, nie sądzę, jest to możliwe. Potrzebujesz kontekstu graficznego, aby utworzyć FontMetrics i podać informacje o rozmiarze czcionki.

3

Można użyć obiektu Graphics2D dostać granice czcionek (w tym szerokość):

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

Ale to zależy od tego jak dostaniesz przedmiot Graphics2D (na przykład z Image).

+0

Zakładam, że liczy się jako składnik GUI. – Link19

+0

@GlenLamb Różniam się, 'Obrazy' nie są komponentami GUI. – dacwe

+0

Zgadzam się, ale konkretna potrzeba zrobienia tego BEZ komponentów GUI sugerowałoby ogólnie awt, w przeciwnym razie wymaganie nie ma większego sensu. – Link19

2

Daje to dla mnie wynik (137,0, 15,09375). Nie mam pojęcia, jakie są jednostki, ale z pewnością wygląda to proporcjonalnie i nie używa bezpośrednio 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() + ")"); 
Powiązane problemy