Extraire les dimensions d'un mot...

Extraire les dimensions d'un mot... - Java - Programmation

Marsh Posté le 02-12-2004 à 16:51:11    

Bonjour à tous,
 
je voudrais savoir comment puis-je faire pour obtenir les dimensions (hauteur et largeur) d'un texte dans une fonte particulière ?
 
Je sais que dans une méthode paint il est possible d'utiliser un objet FontMetrics avec un script du genre :

Code :
  1. JPanel p = new JPanel();
  2. Font timesR = new Font("Times Roman",Font.PLAIN,14);
  3. FontMetrics fm = p.getFontMetrics(getFont());
  4. ...


 
Le problème est que la classe dans laquelle je souhaite récupérer les dimensions d'un mot ne contient aucune méthode paint, aucun composant d'interface...
 
Je pense qu'il existe une solution pour pouvoir connaître les dimensions d'un mot à partir d'un objet Font et du String correspondant à son contenu ?
 
Je vous remercie d'avance de vos réponses...
 
                              Baba

Reply

Marsh Posté le 02-12-2004 à 16:51:11   

Reply

Marsh Posté le 02-12-2004 à 17:51:07    

Essai de passer un JPanel en parametre pour pouvoir recuperer le fontMetrics qui lui est associé
 

Reply

Marsh Posté le 02-12-2004 à 18:04:34    

On ne peut pas faire autrement que d'utiliser un objet graphique ?
 
J'avais penser à cette méthode...

Reply

Marsh Posté le 02-12-2004 à 19:45:41    

une minute, j'ai ça quelque part... normalement :p


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 02-12-2004 à 19:47:07    

allez hop, un bidule qui va à la ligne si necessaire
(super bourrin hein, mais bon voilà quoi)

Code :
  1. public static Image getMessageImage(String title, Color color) {
  2.         Image img = new BufferedImage(IMAGE_SIZE_X, IMAGE_SIZE_Y, BufferedImage.TYPE_BYTE_INDEXED);
  3.         Graphics2D graphics = (Graphics2D) img.getGraphics();
  4.         graphics.setClip(0, 0, IMAGE_SIZE_X, IMAGE_SIZE_Y);
  5.         // fill the background with white
  6.         graphics.setColor(Color.white);
  7.         graphics.fillRect(0, 0, IMAGE_SIZE_X, IMAGE_SIZE_X);
  8.         // prints title text in <color>
  9.         graphics.setColor(color);
  10.         graphics.setFont(new Font("Helvetica", Font.BOLD, 14));
  11.         int lineHeight = graphics.getFontMetrics().getHeight()+5;
  12.         int maxLineSize = IMAGE_SIZE_X-20;
  13.         StringTokenizer st = new StringTokenizer(title, " \n\r\t\f", true);
  14.         StringBuffer currentLine = new StringBuffer();
  15.         String nextEl = new String();
  16.         int nbrLines = 0;
  17.         while (st.hasMoreElements()) {
  18.             currentLine = new StringBuffer();
  19.             nbrLines++;
  20.             while (graphics.getFontMetrics().stringWidth(currentLine.toString()+nextEl) <= maxLineSize && st.hasMoreElements()) {
  21.                 currentLine.append(nextEl);
  22.                 nextEl = (String) st.nextElement();
  23.             }
  24.             graphics.drawString(currentLine.toString(), 10, (nbrLines*lineHeight));
  25.         }
  26.         graphics.drawString(currentLine.toString()+nextEl, 10, (nbrLines*lineHeight));
  27.         return img;
  28.     }


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 02-12-2004 à 19:47:40    

tu lances ça dans une jvm en headless, et ça tourne sans problème sur un serveur sans carte graphique.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 03-12-2004 à 14:12:28    

Merci beaucoup...

Reply

Marsh Posté le 03-12-2004 à 14:20:26    

Code :
  1. StringBuffer currentLine = new StringBuffer();
  2.          String nextEl = new String();

houlà [:psychokwak]
 
bon on va mettre ça sur le compte que c'est du code que j'ai écrit y'a 3 ans [:itm]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed