Gibt es eine Möglichkeit, die Länge einer Zeichenfolge in Pixeln zu berechnen, wenn ein bestimmtes Objekt java.awt.Font
verwendet wird, das keine GUI-Komponenten verwendet?Stringlänge in Pixel in Java
Antwort
das keine GUI-Komponenten verwendet?
Es hängt davon ab, was Sie hier bedeuten. Ich nehme an, du meinst, du willst es tun, ohne eine HeadlessException
zu erhalten.
Der beste Weg ist mit einem BufferedImage
. AFAIK, wird dies nicht werfen ein 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");
Anders als so etwas wie dieses verwenden, ich glaube nicht, Sie können. Sie benötigen einen Grafikkontext, um eine FontMetrics
zu erstellen und Ihnen Schriftgrößeninformationen zu geben.
Sie können das Graphics2D
Objekt die Schrift Grenzen (einschließlich der Breite) erhalten:
Graphics2D g2d = ...
Font font = ...
Rectangle2D f = font.getStringBounds("hello world!", g2d.getFontRenderContext());
Aber das hängt davon ab, wie Sie das Graphics2D
Objekt erhalten werden (zum Beispiel von einem Image
).
Ich gehe davon aus, dass das als GUI-Komponente zählt. – Link19
@GlenLamb Ich bin anderer Meinung, 'Image's sind keine GUI-Komponenten. – dacwe
Ich stimme zu, aber die spezifische Notwendigkeit, es ohne GUI-Komponenten zu tun würde im Allgemeinen awt implizieren, sonst macht die Anforderung wenig Sinn. – Link19
Dies ergibt die Ausgabe von (137.0, 15.09375) für mich. Ich habe keine Ahnung, was die Einheiten sind, aber es sieht sicherlich proportional korrekt aus und verwendet Graphics2D nicht direkt.
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() + ")");
Ist das für AWT Font? – Link19
Siehe auch [diese Antwort] (http://stackoverflow.com/questions/6295084/cut-out-image-in-shape-of-text/6296381#6296381) für die Verwendung eines 'GlyphVector'. Es legt das endgültige Bild in eine GUI, aber das ist nur um es anzuzeigen. –