Méthode pour un LineBreaker
Bonjour,
Je débute dans l'utilisation des méthodes et j'ai un petit problème avec ma première méthode disons "complexe". Enfin je veux dire par là que ce n'est plus du niveau de la méthode pour faire une somme!^^
Bref, je voudrais créer une méthode qui me permettrais de mettre en forme un texte en une seule ligne...avec beaucoup d'arguments. J'ai très bien réussi à utiliser le procédé proposé par la doc et ça fonctionne très bien. Maintenant je voudrais faire en sorte qu'il soit écrit une seule fois pour pouvoir le réutiliser à volonté vu que je devrais beaucoup l'utiliser dans mon programme. Voici mon code:
Code:
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
| public class TextBuilder {
private LineBreakMeasurer lineMeasurer;
private int paragraphStart;
private int paragraphEnd;
public void autoLineBreaker(JPanel panel, AttributedString string, Hashtable<TextAttribute, Object> map, String police, Float size, int posY, Graphics g){
map.put(TextAttribute.FAMILY, police);
map.put(TextAttribute.SIZE, size);
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(
RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
if (lineMeasurer == null) {
AttributedCharacterIterator paragraph = string.getIterator();
paragraphStart = paragraph.getBeginIndex();
paragraphEnd = paragraph.getEndIndex();
FontRenderContext frc = g2d.getFontRenderContext();
lineMeasurer = new LineBreakMeasurer(paragraph, frc);
}
float breakWidth = (float)panel.getSize().width;
float drawPosY = posY;
lineMeasurer.setPosition(paragraphStart);
while (lineMeasurer.getPosition() < paragraphEnd) {
TextLayout layout = lineMeasurer.nextLayout(breakWidth);
float drawPosX = layout.isLeftToRight()
? 0 : breakWidth - layout.getAdvance();
drawPosY += layout.getAscent();
layout.draw(g2d, drawPosX, drawPosY);
drawPosY += layout.getDescent() + layout.getLeading();
}
}
} |
Et donc pour l'appeler:
Code:
objet.autoLineBreaker(panel, string, map, "Arial", 15.0, 0, g)
(J'ai ajouté un argument posY car j'en aurais besoin plus tard...)
Pour commencer, si vous avez quelque remarque qui soit sur mon code je veux bien l'entendre afin de pouvoir l'améliorer! :)
Ensuite, voici mon problème: quand j'essaie d'appliquer ma méthode sur un panel, eclipse me répond naturellement que ma méthode n'est pas définie pour le type "nomDuPanel". Comment faire pour la définir de manière à ce que ça fonctionne?
Et pour finir, l'arguments Graphics g est essentiel mais comment faire pour ne pas avoir besoin de l'appeler dans la classe où je souhaite invoquer ma méthode?
J'espère que vous pourrez m'aider, merci d'avance! :)