Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3026 connectés 

 


Dernière réponse
Sujet : [Swing] Texte multiligne dans un JLabel
cableur

R3g a écrit :

Je voudrais utiliser un JLabel pour afficher des infos qui tiennent sur 10 lignes. Le problème, c'est que si j'écris un '\n' dans le JLabel, il me marque un vieux carre à la place. J'ai essaye avec la propriete systeme "line.separator" : pareil. En fait, la seule solution que j'ai trouve, c'est d'utiliser des balises html

Code :
  1. <li>

, mais je trouve ca un peu "bidouille". Est-ce que qqun sait coment faire ?


 
La solution simple
                panneau_publicitaire = new JTextPane();
  panneau_publicitaire.setOpaque(false);  // transparence
                panneau_publicitaire.setFocusable(false); // pas plus de sélection possible
  panneau_publicitaire.setFont(new Font("Tahoma", Font.BOLD, 11));
  panneau_publicitaire.setText("Ce panneau ressemble à un jLabel tout fait mais prend plusieurs lignes " );
  // autres


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
cableur

R3g a écrit :

Je voudrais utiliser un JLabel pour afficher des infos qui tiennent sur 10 lignes. Le problème, c'est que si j'écris un '\n' dans le JLabel, il me marque un vieux carre à la place. J'ai essaye avec la propriete systeme "line.separator" : pareil. En fait, la seule solution que j'ai trouve, c'est d'utiliser des balises html

Code :
  1. <li>

, mais je trouve ca un peu "bidouille". Est-ce que qqun sait coment faire ?


 
La solution simple
                panneau_publicitaire = new JTextPane();
  panneau_publicitaire.setOpaque(false);  // transparence
                panneau_publicitaire.setFocusable(false); // pas plus de sélection possible
  panneau_publicitaire.setFont(new Font("Tahoma", Font.BOLD, 11));
  panneau_publicitaire.setText("Ce panneau ressemble à un jLabel tout fait mais prend plusieurs lignes " );
  // autres

Chklang Encore mieux : Si tu met <html></html> avec ton texte dedans, cela interprete ton texte comme du code html. Donc voici une petite classe bien sympatique :
 

Code :
  1. import javax.swing.JLabel;
  2. public class MultiLigne extends JLabel {
  3.     public MultiLigne(String texte) {
  4.      //Doit remplacer les caractères speciaux...
  5.      //Donc commence par le "&", puis s'occupe des balises, et enfin ajoute les sauts de ligne...
  6.      super ("<html>" + texte.replaceAll("&", "&amp;" ).replaceAll("<", "&lt;" ).replaceAll(">", "&gt;" ).replaceAll("\n", "<br />" ) + "</html>" );
  7.     }
  8. }

Chklang Même mieux.... Le but d'un texte multiligne est de modifier la mise en forme de chaque ligne en fonction de la taille de la fenetre.
Donc là, le mieux serais de découper chaque \n par un nouveau FlowLayout, et chaque espace par un JLabel. Ainsi les mots reviendront à la ligne correctement...
 
ps : Je répond à un sujet vieux de 7ans car il apparait dans les premiers de GOOGLE, et d'autres risquent donc de tomber dessus...
darklord22

gfive a écrit a écrit :

Tu le veux en AWT, aussi??? :D:D  




 
frimeur ;)
 
 :hello:

gfive Tu le veux en AWT, aussi??? :D:D
R3g Exact gfive, pas mal du tout. Merci.
R3g Ben en fait ces infos sont des stats sur le derpoulement du programme (temps ecoule, temps restant, etc...) et je voulais les afficher dans un JLabel avec un belle bordure, dans un JPanel.
Je me doutais que le JLabel etait pas fait pour du multiligne (encore qu'il est utilisé comme ca dans les exemples du tutorial Java), mais je voudrais une zone de texte non éditable et qui ai la meme couleur que le JPanel, et le JLabel semblait la solution la plus simple.

 

[jfdsdjhfuetppo]--Message édité par R3g--[/jfdsdjhfuetppo]

darklord22 joli gfive. Connaissait pas !
 
merchi ;)

 

[jfdsdjhfuetppo]--Message édité par darklord22--[/jfdsdjhfuetppo]

gfive ben tu te crées une classe MultiLineLabel....Qui affiche plusieurs JLabel dans un JPanel, en créant des labels qui contiennent le texte entre chaque \n...
C tout con!! :D
 
Ca donnerai qqchose du genre :
 
public class MultiLineLabel extends JPanel {
 
public MutliLineLabel(String text) {
      super(new BoxLayout());
      StringTokenizer st = new StringTokenizer(text, "\n" );
      while(st.hasMoreTokens()) {
            add(new JLabel(st.nextToken()));
      }
}
 
}
 
 
Bon, je sais pas si ça marche, je l'ai pas testé, mais normalement, y'a pas de raison.
darklord22 bin la sémantique du JLabel c'est d'être un label simple sur une ligne, c'est pour ca que tu n'arrives pas à faire mieux ;)
 
Tu veux les afficher où (dans quoi) ces infos?
R3g Je voudrais utiliser un JLabel pour afficher des infos qui tiennent sur 10 lignes. Le problème, c'est que si j'écris un '\n' dans le JLabel, il me marque un vieux carre à la place. J'ai essaye avec la propriete systeme "line.separator" : pareil. En fait, la seule solution que j'ai trouve, c'est d'utiliser des balises html

Code :
  1. <li>

, mais je trouve ca un peu "bidouille". Est-ce que qqun sait coment faire ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)