2013-08-20 13 views
5

Jak obliczyć szerokość String w pikselach w Javie? Na przykład mam ciąg napis "Hello World!". Jaka jest długość w pikselach, biorąc pod uwagę rodzinę i rozmiar czcionki?Jak obliczyć szerokość łańcucha w pikselach?

+0

Dobrze, masz specjalną czcionkę i rozmiar czcionki w umyśle? – Matthias

+0

Może to być dowolna osoba. – user2550754

+0

Edytował formatowanie, aby w szczególności usunąć znaczniki kodu dla długości. –

Odpowiedz

1

Istnieje wiele sposobów, aby osiągnąć to, co chcesz, w oparciu o to, co jest chcesz osiągnąć, na przykład ...

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(); 

Ale to ma tylko relevence dla BufferedImage i to Graphics kontekst, nie przełoży się z powrotem do powiedzenia, coś jak sito lub drukarka.

Jednak dopóki masz kontekst Graphics, możesz osiągnąć ten sam wynik.

Przykład ten, oczywiście, wykorzystuje domyślną czcionkę zainstalowaną w kontekście Graphics, co można zmienić, jeśli trzeba ...

+0

Po prostu mam' String'. Znam jego długość, rodzinę czcionek, rozmiar czcionki. Chcę obliczyć jego rozmiar w pikselach. – user2550754

+0

Dobrze, możesz użyć czegoś podobnego do powyższego. Szerokość i wysokość zależą od kontekstu "Grafika", na który renderujesz. Podczas gdy masz rodzinę czcionek, rozmiar czcionki i tekst, brakuje kluczowego elementu – MadProgrammer

+0

+1, ale TextLayout/SwingUtilities.computeStringWidth – mKorbel

4

Krótko mówiąc: pytanie zależy od struktury, z której korzystasz. Na przykład, jeśli używasz AWT i mają Graphics obiekt graphics i Font obiekt font można wykonać następujące czynności:

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

Wyjazd this aby uzyskać więcej informacji.

1

Można spróbować czegoś jak ten

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

doc Patrz to może pomóc.

+0

Wydaje się, że jest to trochę mylące, biorąc pod uwagę, że możesz użyć 'Graphics # getFontMetrics', ale dam ci głos na bycie innym;) – MadProgrammer

0

istnieje kilka sposobów, aby to zrobić, możesz spróbować label.getElement().getClientWidth(); jeśli tekst jest w label, jeśli używasz AWT można użyć Graphics.getFontMetrics następnie FontMetrics.stringWidth

0

Można użyć FontMetrics. Klasa FontMetrics definiuje obiekt metryk czcionek, który zawiera informację o renderowaniu określonej czcionki na określonym ekranie.

można coś zrobić jak poniżej

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

Mam całkiem dobre przeczucie, że to nie zadziała. Rozmiar piksela będzie zależał od kontekstu 'Graphics', który przekazujesz' null' dla ... – MadProgrammer

+0

Nie wiem, jak przejść weryfikację wyniku, ale kiedy go uruchomiłem, otrzymałem 67 jako wynik dla ciągu Hello World !. –

Powiązane problemy