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

  FORUM HardWare.fr
  Programmation
  Java

  [JAVA 2D] Redimensionner la taille d'un composant en fonction du texte

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA 2D] Redimensionner la taille d'un composant en fonction du texte

n°692795
Yoyo@
Posté le 05-04-2004 à 16:02:15  profilanswer
 

Salut,
 
Voila mon probleme:
 
Je cherche a utiliser dans une JFrame des composants tout bete (descendant de JComponent donc),des petits rectangles destinés a contenir un mot.
 
Seulement, voila, je voudrais que la taille des composants dépende du texte qu'ils hébergent.
 
Pour cela, j'avais l'idée d'utiliser des méthodes du genre Font.getStringBounds(myString, frc), frc étant du type FontRenderContext.
 
Seulement, pour obtenir mon FontRenderContext, j'ai besoin de faire un appel du genre g2.getFontRenderContext, g2 étant du type Graphics2D, cad le contexte graphique de mon composant.
 
Seulement, voila, le seul endroit ou il me semble pouvoir y accéder est la méthode PaintComponent, qui est appelée chque fois que le composant a besoin d'etre redessiné... Tout la est mon probleme: une fois que mon composant est bien dimensionné, quel est lintéret de refaire tous ces calculs? Ne pourrais je pas faire ces calculs une seule fois au lieu de les faire a chaque rafraichissement?
 
Comment faire?

mood
Publicité
Posté le 05-04-2004 à 16:02:15  profilanswer
 

n°692810
nraynaud
lol
Posté le 05-04-2004 à 16:17:09  profilanswer
 

FontMetrics, je connais cette classe de nom et elle doit avoir un rapport avec la choucroute.


---------------
trainoo.com, c'est fini
n°692859
Yoyo@
Posté le 05-04-2004 à 16:52:02  profilanswer
 

nraynaud a écrit :

FontMetrics, je connais cette classe de nom et elle doit avoir un rapport avec la choucroute.


 
Ca m'a l'air pas mal, ca me permettrait d'obtenir la largeur et la longueur des mes chaines de caracteres, sans avoir a spécifier de contexte graphique.
 
Sinon, mon ultime recours aurait été de faire les calculs lors du premier appel a PaintComponent et ensuite d'enregistrer les resulats dans dans des données membre et de mettre un booléen "Sized" a true. Mais pas tres tres propre...
 
Je vais essayer avec la classe fontMetrics alors!
 
Merci!!

n°693001
R3g
fonctionnaire certifié ITIL
Posté le 05-04-2004 à 18:04:32  profilanswer
 

Yoyo@ a écrit :

Salut,
Seulement, pour obtenir mon FontRenderContext, j'ai besoin de faire un appel du genre g2.getFontRenderContext, g2 étant du type Graphics2D, cad le contexte graphique de mon composant.
 
Seulement, voila, le seul endroit ou il me semble pouvoir y accéder est la méthode PaintComponent, qui est appelée chque fois que le composant a besoin d'etre redessiné... Tout la est mon probleme: une fois que mon composant est bien dimensionné, quel est lintéret de refaire tous ces calculs? Ne pourrais je pas faire ces calculs une seule fois au lieu de les faire a chaque rafraichissement?
 
Comment faire?

http://java.sun.com/j2se/1.4.2/doc [...] Graphics() devrais faire l'affaire si tu hérites de JComponent.


---------------
Au royaume des sourds, les borgnes sont sourds.
n°693250
Yoyo@
Posté le 06-04-2004 à 10:28:09  profilanswer
 

nraynaud a écrit :

FontMetrics, je connais cette classe de nom et elle doit avoir un rapport avec la choucroute.


 
Je viens de regarder cette classe FontMetrics, et franchement, ca ne me parait pas simple non plus.
 
Déja, cette classe est abstraite (et son constructeur est protected), donc, je suis obligé de créer une classe dérivée (avec une InnerClass par exemple).
 
Ensuite, quand j'essaie un truc tout bete du genre :
 

Code :
  1. Font font = new Font("Arial", Font.PLAIN, 10);
  2.         class myMetrics extends FontMetrics{
  3.   myMetrics(Font ft){
  4.     super(ft);
  5.   }
  6. }
  7. myMetrics ftm = new myMetrics(font);
  8. System.out.println(ftm.stringWidth("Bonjour" ));


 
J'obtiens un magnifique java.lang.StackOverflowError...

n°693485
Yoyo@
Posté le 06-04-2004 à 12:17:45  profilanswer
 

Bon, je commence un peu mieux a comprendre:
 
Pour calculer la largeur de ma String, il me faut un contexte graphique, et ce contexte graphique, je ne peux l'obtenir qu'une fois que les JComponent ont été rendus visibles.
 
Alors, j'utilise mon contexte graphique, je calcule alors les largeurs nécessaires, et je redimensionne mes composants en fonction.
 
Bien ur, je dois faire ca dans le Event Dispatching Thread, donc, je dois utiliser un appel avec un InvokeLater...
 
Voila ce que je déduis de tout ca.
 
Si vous avez des commentaires, ou que vous trouver cela maladroit, dites le moi :)

n°693488
R3g
fonctionnaire certifié ITIL
Posté le 06-04-2004 à 12:19:32  profilanswer
 

Heu moi j'ai une remarque : tu veux faire un composant qui affiche du texte. T'as essayé le JLabel ?


---------------
Au royaume des sourds, les borgnes sont sourds.
n°693492
Yoyo@
Posté le 06-04-2004 à 12:24:16  profilanswer
 

En fait, pour le moment, je mets une petite chaine de caractere, mais par la suite, je voudrais peut etre personnaliser un petit peu (par exemple, avoir plusieurs lignes de texte), et pouvoir le bouger a la souris.
 
Donc, je préférais créer mon propre composant des le début.
 
Merci du conseil.
 
Je pense que le JLabel serait vite limité, meme si je peux, il me semble, mettre plusieurs lignes de texte a l'intérieur, grace a du HTML.
 
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JAVA 2D] Redimensionner la taille d'un composant en fonction du texte

 

Sujets relatifs
Taille fixe pour pseudo frames?[JS] griser un champ 'text' en fonction d'un champ 'select'
fonction permettant de convertir un fichier xls en csvModification textes en fonction d'un choix de menu déroulant
Composant NMFTP absent dans delphi7?équivalent Java List.toArray
[Visual c++] convertir une taille en Octet automatiquement 2[eclispe][plugin][java] récuperer le nom de projet
[Visual c++] convertir une taille en Octet automatiquementremplacer dans un fichier texte
Plus de sujets relatifs à : [JAVA 2D] Redimensionner la taille d'un composant en fonction du texte


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR