2012-04-13 11 views
5

È possibile trovare il vero riquadro di delimitazione di una stringa in Java? cioè il rettangolo più piccolo che include i pixel che effettivamente vengono dipinti?Come trovare la vera dimensione visibile di una stringa di testo in Java

Ho esaminato FontMetrics e LineMetrics e sebbene consentano il passaggio di una stringa, non sembrano prendere in considerazione i caratteri stessi, eh "a", "p" e "P" restituiscono tutti la stessa altezza

In particolare, sembrano includere la discesa nell'altezza della stringa anche se il carattere effettivo non scende al di sotto della linea di base. Ci sono altre metriche a cui posso accedere che restituiscono un vero riquadro di delimitazione?

In alternativa, c'è un modo per dire se un particolare personaggio ha un discensore?

+1

Hai controllato i metodi getAscent(), getDescent() e charWidth()? Controlla la pagina [FontMetrics] (http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/FontMetrics.html) per dettagli –

risposta

4

Vedere questo tutorial on measuring text, che è fortemente focalizzato su FontMetrics.

Le misurazioni più avanzate (per ottenere il riquadro di delimitazione di una stringa particolare), quindi TextLayout è il tuo amico, as explained here.

Oltre a questo tutorial su TextLayout, javadoc contiene esempi del suo utilizzo.

+0

Ho visto FontMetrics, il problema è che il il valore height() sembra sempre includere la discesa, anche per un carattere come "a". Quindi la mia scatola attorno a "a" ha spazio extra sotto la lettera. – Martin

+0

Aggiunto link al tutorial di TextLayout, che a mio parere gestisce questo. – daveb

+0

In particolare TextLayout.getBounds – daveb

0

È possibile utilizzare javax.swing.SwingUtilities.layoutCompoundLabel. Non scoraggiarti dai molti parametri. Ci sono due versioni, la versione con JComponent (potrebbe essere null) fa più flag. È usato per JLabel, quindi abbastanza versatile, e produce un rettangolo.

BTW Che anche su "a" un discensore potrebbe essere aggiunto ai limiti, è probabile che accada anche qui. Potresti prendere GlyphVector e calcolare un riquadro di delimitazione, ma cosa succede quando il suggerimento sui font è attivo, quindi le posizioni dei pixel sono leggermente discoste, quale errore potrebbe accumularsi su più caratteri?

Problemi correlati