2012-04-13 5 views
5

¿Es posible encontrar el cuadro delimitador verdadero de una cadena en Java? es decir, ¿el rectángulo más pequeño que incluye los píxeles que realmente se pintan?Cómo encontrar el tamaño real visible de una cadena de texto en Java

He consultado FontMetrics y LineMetrics, y aunque permiten pasar una cadena, no parecen tener en cuenta los caracteres en sí, eh "a", "p" y "P" regresan todos La misma altura.

Específicamente, parecen incluir el descenso en la altura de la cuerda, incluso si el carácter real no desciende por debajo de la línea de referencia. ¿Hay otras métricas a las que pueda acceder que devuelvan un cuadro delimitador verdadero?

Alternativamente, ¿hay alguna manera de saber si un personaje en particular tiene un descensor?

+1

¿Has comprobado los métodos getAscent(), getDescent() y charWidth()? Consulte la página [FontMetrics] (http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/FontMetrics.html) para obtener más información –

Respuesta

4

Consulte este tutorial on measuring text, que está muy centrado en FontMetrics.

Las medidas más avanzadas (para obtener el cuadro delimitador de una cadena en particular), entonces TextLayout es su amigo, as explained here.

Además de ese tutorial en TextLayout, el javadoc contiene ejemplos de su uso.

+0

He consultado FontMetrics, el problema es que el El valor de altura() siempre parece incluir el descenso, incluso para un personaje como "a". Entonces mi cuadro alrededor de "a" tiene espacio adicional debajo de la letra. – Martin

+0

Agregué un enlace al tutorial de TextLayout, que creo que maneja esto. – daveb

+0

En particular, TextLayout.getBounds – daveb

0

Puede usar javax.swing.SwingUtilities.layoutCompoundLabel. No te desanimes por los muchos parámetros. Hay dos versiones, la versión con JComponent (puede ser nulo) hace más banderas. Se usa para JLabel, por lo que es bastante versátil y produce un Rectángulo.

BTW Es probable que incluso en "a" un descensor se agregue a los límites, es probable que suceda aquí también. Podrías tomar el GlyphVector y calcular un cuadro delimitador allí, pero ¿qué ocurre cuando la sugerencia de fuentes está activada, por lo que las posiciones de los píxeles están ligeramente apagadas, lo que podría acumularse el error en varios caracteres?

Cuestiones relacionadas