¿Justificación completa con un reemplazo de Java Graphics.drawString?
Pregunta
¿Alguien conoce el código existente que le permite dibujar texto completamente justificado en Java2D?
Por ejemplo, si dijera, drawString (" texto de ejemplo aquí " ;, x, y, ancho)
, hay una biblioteca existente que podría averiguar qué parte de ese texto cabe dentro de la ancho, haga un espacio entre caracteres para hacer que el texto se vea bien y haga automáticamente el ajuste de palabras básico?
Solución
Aunque no es la solución más elegante ni robusta, aquí hay un método que tomará la Font
de la actual Graphics
y obtenga su objeto FontMetrics
para averiguar dónde dibujar el texto y, si es necesario, pasar a una nueva línea:
public void drawString(Graphics g, String s, int x, int y, int width)
{
// FontMetrics gives us information about the width,
// height, etc. of the current Graphics object's Font.
FontMetrics fm = g.getFontMetrics();
int lineHeight = fm.getHeight();
int curX = x;
int curY = y;
String[] words = s.split(" ");
for (String word : words)
{
// Find out thw width of the word.
int wordWidth = fm.stringWidth(word + " ");
// If text exceeds the width, then move to next line.
if (curX + wordWidth >= x + width)
{
curY += lineHeight;
curX = x;
}
g.drawString(word, curX, curY);
// Move over to the right for next word.
curX += wordWidth;
}
}
Esta implementación separará el String
en una matriz de String
mediante el uso de split
con un carácter de espacio como el único separador de palabras , así que probablemente no sea muy robusto. También supone que la palabra va seguida de un carácter de espacio y actúa en consecuencia cuando se mueve la posición curX
.
No recomendaría el uso de esta implementación si fuera usted, pero probablemente las funciones que se necesitan para realizar otra implementación seguirían utilizando los métodos proporcionados por FontMetrics
class .
Otros consejos
Para el ajuste de palabras, le puede interesar Cómo generar una cadena en varias líneas usando Gráficos . No hay justificación aquí, no estoy seguro si es fácil (o imposible) agregar ...