87 votes

Comment modifier la taille de la police d'un JLabel pour prendre la taille maximale

J'ai un JLabel dans un conteneur. La taille par défaut de la police est très petite. J'aimerais que le texte de la JLabel pour prendre la taille maximale.

Comment puis-je faire ça ?

1 votes

@animatrix30 : votre question n'a pas beaucoup de sens. Voulez-vous que la taille horizontale ou la taille verticale corresponde à la taille de la JLabel (ou les deux) ? Est-ce que cela doit être automatisé : c'est-à-dire que si vous décidez de rendre votre JLabel, disons, plus large, la police doit-elle s'agrandir automatiquement ? Pourquoi voulez-vous faire cela ? C'est une demande peu courante.

0 votes

Que voulez-vous obtenir ? Afficher une grande police ? ou redimensionner la police par taille de composant ?

0 votes

Mon Container n'a qu'un seul élément : le JLabel. Par défaut, le JLabel prend toute la place. Cependant, la taille de la police est très petite. Je voudrais que la taille de la police soit maximale, afin d'avoir le moins de "blanc" possible. J'espère que vous avez compris ce que j'ai essayé d'expliquer :)

121voto

Asaf David Points 1448
label = new JLabel("A label");
label.setFont(new Font("Serif", Font.PLAIN, 14));

tiré de Comment utiliser le HTML dans les composants Swing

89voto

coobird Points 70356

Ce n'est pas le code le plus joli, mais ce qui suit permet de choisir une taille de police appropriée pour un texte de type JLabel appelé label de manière à ce que le texte qui se trouve à l'intérieur s'adapte autant que possible à l'intérieur sans déborder de l'étiquette :

Font labelFont = label.getFont();
String labelText = label.getText();

int stringWidth = label.getFontMetrics(labelFont).stringWidth(labelText);
int componentWidth = label.getWidth();

// Find out how much the font can grow in width.
double widthRatio = (double)componentWidth / (double)stringWidth;

int newFontSize = (int)(labelFont.getSize() * widthRatio);
int componentHeight = label.getHeight();

// Pick a new font size so it will not be larger than the height of label.
int fontSizeToUse = Math.min(newFontSize, componentHeight);

// Set the label's font size to the newly determined size.
label.setFont(new Font(labelFont.getName(), Font.PLAIN, fontSizeToUse));

En fait, le code examine l'espace disponible dans le texte de l'image. JLabel prend en utilisant le FontMetrics et utilise ensuite ces informations pour déterminer la plus grande taille de police qui peut être utilisée sans déborder du texte de l'objet JLabel .

Le code ci-dessus peut être inséré dans peut-être le paint de la méthode JFrame qui détient le JLabel ou une méthode qui sera invoquée lorsque la taille de la police doit être modifiée.

Voici une capture d'écran du code ci-dessus en action :

alt text
(source : <a href="http://coobird.net/img/growing-text.png" rel="noreferrer">coobird.net </a>)

0 votes

Vous ne pouvez pas vraiment le faire. La police n'existe pas tant que le JLabel, dans ce cas, n'est pas dessiné. Sinon, vous obtiendrez des NPE si vous essayez de le faire dans le mauvais ordre d'initialisation/de redimensionnement/de dessin.

0 votes

Le code devrait être dans validate(), pas dans paint(), parce que changer la police invalide le composant qui déclenche un appel à paint(), donc swing repeint sans cesse le composant, utilisant beaucoup de cpu.

0 votes

Notez que label.getHeight() est indirectement documenté comme utilisant pixel unités tandis que font.getSize() renvoie une valeur dans point unités. Puissance componentHeight besoin utiliser label.getHeight() * PPI / dpi de sorte que Math.min renvoie des points, et non des pixels, dans les deux cas ?

10voto

Ehsan Horrible Points 51
 JLabel textLabel = new JLabel("<html><span style='font-size:20px'>"+Text+"</span></html>");

7voto

ataullahtoffar Points 31
JLabel label = new JLabel("Hello World");
label.setFont(new Font("Calibri", Font.BOLD, 20));

4voto

Bekim Fetaji Points 41

Code source pour Étiquette - Comment changer la couleur et la police (dans Netbeans)

jLabel1.setFont(new Font("Serif", Font.BOLD, 12));

jLabel1.setForeground(Color.GREEN);

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