2013-08-20 20 views
5

Come calcolare la larghezza di un String in pixel in Java? Ad esempio, ho una stringa che dice "Hello World!". Qual è la sua lunghezza in pixel, considerando anche la sua famiglia di caratteri e le sue dimensioni?Come si calcola la larghezza di una stringa in pixel?

+0

Beh, hai un carattere speciale e la dimensione del carattere in mente? – Matthias

+0

Può essere arbitrariamente chiunque. – user2550754

+0

Modificato la formattazione per rimuovere in particolare la marcatura del codice per la lunghezza. –

risposta

1

Ci sono un certo numero di modi per ottenere ciò che si vuole, in base a che cosa si vuole raggiungere, per esempio ...

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

Ma questo ha solo relevence per la BufferedImage ed è Graphics contesto, non si tradurrà di nuovo da dire, qualcosa di simile a uno schermo o stampante.

Tuttavia, a condizione che si disponga di un contesto Graphics, è possibile ottenere lo stesso risultato.

Questo esempio, ovviamente, utilizza il carattere predefinito installato per la Graphics contesto, che si può cambiare se avete bisogno di ...

+0

Ho solo un' String'. Conosco la sua lunghezza, la famiglia di caratteri, la dimensione del carattere. Voglio calcolare la sua dimensione in pixel. – user2550754

+0

Bene, allora puoi usare qualcosa come sopra. La larghezza e l'altezza dipendono dal contesto 'Grafica' in cui viene eseguito il rendering. Mentre hai la famiglia di caratteri, la dimensione del carattere e il testo, ti manca l'elemento chiave – MadProgrammer

+0

+1 ma TextLayout/SwingUtilities.computeStringWidth – mKorbel

4

In breve: la domanda dipende dal framework che si sta utilizzando. Ad esempio, se si utilizza AWT, e dispone di un Graphics oggetto graphics, e un oggetto fontFont è possibile effettuare le seguenti operazioni:

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

Partenza this per ulteriori informazioni.

1

si può provare qualcosa di simile

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

consultare questo doc, può aiutare.

+0

Sembra un po 'convalutato considerando che puoi usare 'Graphics # getFontMetrics', ma ti darò un voto per essere diverso;) – MadProgrammer

0

ci sono un paio di modi per farlo, si può provare label.getElement().getClientWidth(); se il testo è in un'etichetta, se si sta utilizzando AWT è possibile utilizzare Graphics.getFontMetrics poi FontMetrics.stringWidth

0

È possibile utilizzare FontMetrics. La classe FontMetrics definisce un oggetto metrica font, che incapsula informazioni sul rendering di un particolare tipo di carattere su un particolare schermo.

Si può fare qualcosa di simile sotto

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

Ho una bella sensazione che questo non funzionerà. La dimensione dei pixel dipenderà dal contesto 'Graphics', che stai passando' null' per ... – MadProgrammer

+0

Non sai come si verifica il risultato incrociato, ma quando l'ho eseguito ho ottenuto 67 come output per la stringa Hello World !. –

Problemi correlati