1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| public static void dessinerParagraphe(Graphics g, String paragraphe, int posX, int posY, int longMax) {
int i;
FontMetrics fm = g.getFontMetrics();
// Le vecteur suivant doit contenir toutes les lignes écrite à la fin
Vector<String> ligne = new Vector<String>();
// On coupe le paragraphe en section
String section[] = paragraphe.split("\n");
int nbSection = section.length;
for(i=0; i < nbSection; i++) {
// On teste si la ligne est plus longue que la taille spécifiée
if(longMax > 0 && fm.stringWidth(section[i]) > longMax) {
int mem = 0, k = 0;
String ssChaine;
StringBuffer sb = new StringBuffer(section[i]);
do {
// On garde en mémoire le premier espace
mem = k;
// On cherche le suivant espace
k = sb.indexOf(" ", mem+1);
// Si on n'est pas arrivé en bout de chaine
if( k != -1) {
// On prends la dernière sous chaine
ssChaine = sb.substring(0, k);
// Si on dépasse la taille max, alors...
if( fm.stringWidth(ssChaine) > longMax ) {
// On ajoute la sous chaine précédente
ssChaine = sb.substring(0, mem);
ligne.add(ssChaine);
// On la retire du buffer
sb.delete(0,mem+1);
}
}
} while( k != -1 );
// On ajoute le dernier bout de chaine
ssChaine = sb.toString();
ligne.add(ssChaine);
} else {
// Si pas de restriction sur la longueur, on n'a
// plus qu'a ajouter la ligne sans découper !
ligne.add(section[i]);
}
}
// On récupère la hauteur d'une ligne
int hautLigne = fm.getHeight();
// On dessine ligne par ligne
int nbLigne = ligne.size();
for(i=0; i < nbLigne; i++) {
g.drawString( ligne.get(i) , posX, posY);
posY += hautLigne;
}
} |
Partager