2010-06-24 7 views
4

J'ai le code JLabel suivant:Comment définir l'interligne/la hauteur dans un JLabel dans Java Swing?

JLabel someJLabel = new JLabel("<html>first line<br>second line</html>"); 
someJLabel.setFont(new Font("Arial", Font.PLAIN, 16)); 

Ce que je voudrais faire est d'être en mesure de contrôler la hauteur ligne/espacement entre les deux lignes. PS: J'ai également regardé l'utilisation des paragraphes au lieu des lignes de fracture, mais c'est la même chose. Et je ne sais pas si vous pouvez le faire dans une balise html sans utiliser css (vous ne pouvez pas utiliser css dans le code html dans un JLabel dans Java Swing).

Répondre

4

Cela devrait fonctionner, mais ce n'est pas le cas. color: green fonctionne bien.

content.add(new JLabel("<html><p style=\"line-height: 150%;\">hi<br>world</p></html>"));

je suppose que la ligne de hauteur ne fonctionne pas. C'est comme ça que vous le feriez si vous utilisiez CSS, alors peut-être que vous ne pouvez pas le faire de cette façon. Here's a nice tool J'ai trouvé que vous pouvez utiliser pour tester si votre HTML fonctionnera rapidement.

+0

Ya .. Le support CSS dans Swing est actuellement assez boiteux. La propriété line-height est modélisée mais pas rendue. Javadoc pour CSS montre quelles propriétés CSS sont supportées. http://java.sun.com/javase/6/docs/api/index.html?javax/swing/text/html/CSS.html –

+0

Oh .. et merci pour le lien Swing HTML Preview! :) –

+0

Y at-il un moyen de le faire sans css? Et merci aussi pour le lien! –

0

Vous pouvez essayer d'utiliser deux étiquettes et de définir la distance entre les deux, ainsi que les espaces, à l'aide d'un LayoutManager. J'aime GridBoxLayout, moi-même.

Modifier: GridBagLayout. Oups!

+0

Je dois dire que cela va probablement être plus robuste que de jouer avec le kit de l'éditeur. – Justin

+0

Cela peut fonctionner si vous avez seulement 2 lignes, mais que faire si c'est plusieurs lignes? –

+0

S'il s'agit de plusieurs lignes, j'utiliserais un volet de texte, avec la solution de camickr. – badpanda

3

Extrayez la méthode setStyleSheet (...) du HTMLEditorKit. Je ne l'ai jamais utilisé auparavant, mais je crois qu'il offre un soutien de base.

Sinon, vous pouvez utiliser un JTextPane pour contrôler l'interligne. Je pense que vous utiliseriez:

StyleConstants.setLineSpacing(...); 

Vous pouvez ensuite modifier le premier plan/l'arrière-plan, etc. pour que le volet de texte ressemble à une étiquette.

-1

Est-ce que la mise en bordure vide aide, comme

label.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); 

syntaxe de la méthode BorderFactory.createEmptyBorder (top, int gauche, bas, int droite)

2

Hmm .. CSS JLabel semble travaille pour moi, si l'on s'en tient aux propriétés prises en charge. Essayez padding (ou margin) et font-size:

someJLabel = new JLabel("<html><body><p style=\"padding:10; font-size:30\">First line</p><p style=\"padding:10; font-size:20\">Second line</p></body></html>"); 
2

En raison de Java prend en charge <p> tag et CSS marge attribut vous pouvez utiliser la prochaine solution:

new JLabel("<html>first line<p style='margin-top:-5'>second line"); 

post-scriptum Maintenant, il n'est pas nécessaire de fermer les balises html.

+0

Notez également: 'margin-top: -5px' ne fonctionne pas, mais' margin-top: -5' le fait, pour une raison quelconque ... – Tustin2121

Questions connexes