Aunque no es la solución más elegante o robusta, he aquí un método que va a tomar la Font
de la corriente Graphics
objeto y obtener su FontMetrics
con el fin de averiguar dónde trazar el texto, y si es necesario, pasar a una nueva línea de :
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 aplicación se separará lo dado String
en una matriz de String
utilizando el método split
con un carácter de espacio como el único separador de palabra, por lo que probablemente no es muy robusta. También asume que la palabra es seguida por un carácter de espacio y actúa en consecuencia al mover la posición curX
.
No recomendaría usar esta implementación si fuera usted, pero probablemente las funciones que se necesitan para realizar otra implementación seguirían usando los métodos proporcionados por el FontMetrics
class.
Gracias - De hecho, comencé a trabajar en un método similar, y hay una serie de similitudes en nuestro enfoque. También estoy agregando algo de lógica que puede modificar el espaciado entre caracteres. –
Esto es genial. Exactamente lo que necesitaba ahora para terminar un proyecto en ese último minuto. (No es un proyecto serio en producción) – Tone
@Tone Me alegro de poder ayudar :) – coobird