98 votes

Calculer la largeur d'affichage d'une chaîne en Java

Comment calculer la longueur (en pixels) d'une chaîne en Java?

Préférable sans utiliser Swing.

EDIT: Je voudrais dessiner la chaîne en utilisant drawString () dans Java2D et utiliser la longueur pour le retour à la ligne.

150voto

Jon Skeet Points 692016

Si vous voulez juste utiliser AWT, puis utilisez Graphics.getFontMetrics (en indiquant éventuellement la police, pour un non-valeur par défaut) pour avoir un FontMetrics puis FontMetrics.stringWidth pour trouver la largeur de la chaîne spécifiée.

Pour d'autres boîtes à outils, vous aurez besoin de nous donner plus d'informations - il est toujours va être toolkit-dépendante.

63voto

Olofu Mark Points 141

Cela n’a pas toujours besoin d’être dépendant de la boîte à outils ou d’utiliser l’approche FontMetrics, car il est nécessaire d’obtenir d’abord un objet graphique absent dans un conteneur Web ou dans un environnement sans interface graphique.

J'ai testé cela dans une servlet Web et il calcule la largeur du texte.

 String text = "Hello World";
AffineTransform affinetransform = new AffineTransform();     
FontRenderContext frc = new FontRenderContext(affinetransform,true,true);     
Font font = new Font("Tahoma", Font.PLAIN, 12);
int textwidth = (int)(font.getStringBounds(text, frc).getWidth());
int textheight = (int)(font.getStringBounds(text, frc).getHeight());
 

=============================================== ===== Ajoutez les valeurs nécessaires à ces dimensions pour créer toute marge requise.

8voto

Ed Poor Points 783

Utilisez la méthode getWidth dans la classe suivante:

 import java.awt.*;
import java.awt.geom.*;
import java.awt.font.*;

class StringMetrics {

  Font font;
  FontRenderContext context;

  public StringMetrics(Graphics2D g2) {

    font = g2.getFont();
    context = g2.getFontRenderContext();
  }

  Rectangle2D getBounds(String message) {

    return font.getStringBounds(message, context);
  }

  double getWidth(String message) {

    Rectangle2D bounds = getBounds(message);
    return bounds.getWidth();
  }

  double getHeight(String message) {

    Rectangle2D bounds = getBounds(message);
    return bounds.getHeight();
  }

}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X