que - java 2d graphics
¿Completa justificación con un reemplazo de Java Graphics.drawString? (2)
¿Alguien sabe de un código existente que le permite dibujar texto completamente justificado en Java2D?
Por ejemplo, si dije, drawString("sample text here", x, y, width)
, ¿hay una biblioteca existente que pueda determinar cuánto de ese texto se ajusta dentro del ancho, haga un espaciado entre caracteres para hacer el el texto se ve bien, y automáticamente hace el ajuste de palabras básico?
Aunque no es la solución más elegante ni robusta, aquí hay un método que tomará la Font
del objeto Graphics
actual y obtendrá FontMetrics
para saber 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á la String
dada en una matriz de String
utilizando el método de split
con un carácter de espacio como el único separador de palabras, por lo que probablemente no sea muy robusto. También asume que la palabra es seguida por un carácter de espacio y actúa en consecuencia al mover la posición de la 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 la clase FontMetrics
.
Para el ajuste de palabras, es posible que le interese Cómo dar salida a una Cadena en varias líneas usando Gráficos . No hay justificación aquí, no estoy seguro de si es fácil (o imposible) agregar ...