Une justification complète avec un remplacement Java Graphics.drawString?
Question
Quelqu'un connaît-il un code existant qui vous permet de dessiner un texte entièrement justifié dans Java2D?
Par exemple, si je disais, drawString ("exemple de texte ici", x, y, largeur)
, existe-t-il une bibliothèque existante qui pourrait déterminer le pourcentage de ce texte dans le largeur, faites-vous un peu d'espacement entre les caractères pour que le texte paraisse bien, et faites automatiquement le retour à la ligne de base?
La solution
Bien que n'étant pas la solution la plus élégante ni la plus robuste, voici une méthode qui prend Police
du Graphics
et obtenez son FontMetrics
afin de savoir où dessiner le texte et, si nécessaire, passer à une nouvelle ligne:
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;
}
}
Cette implémentation séparera la String
donnée en un tableau de String
à l'aide de split
avec un espace comme séparateur de mots donc ce n’est probablement pas très robuste. Il suppose également que le mot est suivi d'un espace et agit en conséquence lorsque vous déplacez la position curX
.
Je ne vous recommanderais pas d'utiliser cette implémentation si j'étais vous-même, mais les fonctions nécessaires pour effectuer une autre implémentation utiliseraient toujours les méthodes fournies par le classe FontMetrics
.
Autres conseils
Pour habiller les mots, vous pourriez être intéressé par le titre Comment afficher une chaîne sur plusieurs lignes à l'aide de Graphics . Aucune justification ici, pas sûr s'il est facile (ou impossible!) D'ajouter ...