2011-06-03 14 views
9

Estoy creando una línea de tiempo gráfica de un documento de Excel y necesito tener pequeñas etiquetas del nombre del evento junto al marcador para ese evento. Algunos de estos son fáciles y están justificados a la derecha, pero otros quedan justificados y necesito determinar su ancho para poder compensarlos adecuadamente.¿Cómo se determina la longitud de una cadena gráfica?

window.drawString("7/4-Fourth of July",horizontalIndex-Offset,verticalIndex); 

Actualmente estoy promediando el ancho de píxel usando un promedio de ambos tamaños de fuente 10 y 32, pero esto realmente no lo corta. ¿Alguien puede ayudarme a obtener la compensación exacta? enter image description here

Respuesta

4

desde un objeto java.awt.Graphics, puede llamar a getFontMetrics. el objeto FontMetrics tiene un método getStringBounds que hace lo que necesita.

aquí es the documentation

3

TextLayout, se muestra here, es otra alternativa.

+0

Según su ejemplo vinculado, parece que 'TextLayout' puede calcular con precisión el ascenso de la cadena de texto proporcionada, mientras que' FontMetrics' parece querer dar cuenta de diéresis y otros asuntos que podrían no estar presentes. –

+1

@Andrew Thompson: Buen punto. 'TextLayout' parece dar límites más estrictos y funciona con texto con estilo. Aquí hay una comparación cara a cara (http://stackoverflow.com/questions/5979795/how-to-calculate-the-number-of-rows-and-columns-in-each-row-a-text -takes-in-aj/5998117 # 5998117). – trashgod

+0

No hay nada como "disparar" para ayudar a clasificar el cruft. ;) –

4

Como norma general (léase: mi ;-), nunca utilice los métodos drawString de nivel de gráficos. En su lugar, use un par JLabel/CellRendererPane para "imprimir" el texto en cualquier componente.

Las ventajas

  • anti-alias se maneja automágicamente
  • cálculos del tamaño se hacen en las etiquetas intestinos, por lo que los cálculos de posicionamiento no requieren cualesquiera métodos de bajo nivel, sino simplemente basan en las etiquetas prefSize
+0

kleopatra +1 :-) bienvenidos y espero que este largo tiempo haya sido un viaje por el mundo :-), gracias por sus entradas, – mKorbel

+0

@mKorbel gracias :-) el "mundo" era solo una pequeña isla danesa: -) – kleopatra

+0

hmmm realmente envidia, su viento, agua, buen sol de primavera ........... y mosquitos – mKorbel

Cuestiones relacionadas