Comment en sortie une Chaîne de caractères sur plusieurs lignes à l'aide de Graphiques
Mon Programme remplace public void paint(Graphics g, int x, int y);
afin de tirer quelques piqûres à l'aide de g.drawString(someString, x+10, y+30);
Maintenant someString peut être assez long et donc, il ne peut pas tenir sur une seule ligne.
Quelle est la meilleure façon d'écrire le texte sur plusieurs lignes.
Par exemple, dans un rectangle (x1, y1, x2, y2)?
OriginalL'auteur Burkhard | 2008-10-27
Vous devez vous connecter pour publier un commentaire.
Grâce à Epaga de pointe et un couple d'exemples sur le Net (pas si évident à trouver! J'ai utilisé principalement Briser une Ligne de texte mise en page), j'ai pu faire un élément pour afficher le texte justifié. Il est incomplet, mais au moins cela montre l'effet escompté.
Juste pour le fun, j'ai fait le montage d'un cercle (hélas, pas de justification, paraît-il):
Je ne suis pas trop sûr de dx calcul, si.
OriginalL'auteur PhiLho
java.awt.la police.TextLayout pourrait être utile. Voici un extrait de leur code d'exemple:
Sinon, vous pouvez toujours utiliser un Swing de l'élément de texte pour faire le travail pour vous, il suffit de passer dans les Graphiques que vous le souhaitez à peindre.
Notez que TextLayout du constructeur, undocumentedly, déclenche une exception si la chaîne de passe est vide.
L'utilisation de la Forme labelShape = textLayout1.getOutline(null); et puis g2d.de remplissage(labelShape); ils doivent éliminer la frontière
OriginalL'auteur Epaga
Progressivement construire votre chaîne de caractères, un mot à la fois, à l'aide de Epaga la méthode pour trouver la longueur de votre chaîne. Une fois que la durée est plus longue que votre rectangle, de supprimer le dernier mot et d'impression. Répétez jusqu'à ce que vous manquez de mots.
Il sonne comme un mauvais algorithme, mais pour chaque ligne, il est vraiment O(screenWidth/averageCharacterWidth) => O(1).
Encore, utilisez un StringBuffer pour construire votre chaîne!
J'ai l'impression de mal à m'exprimer correctement... je voulais dire que chaque ligne est O(1). Vous pouvez jeter 1000 mots à elle, mais, pour chaque ligne, il va arrêter d'ajouter des mots au bord de l'écran. Dans l'ensemble, oui, O(n).
Il ne fonctionne que si vous supposez que la chaîne sera au max 2 lignes, quand il en aura plus, il ne fonctionnera pas.
OriginalL'auteur Ryan Fox
Eu quelques difficultés à moi c'est ma solution:
Espère que ça aide.... simple, mais il fonctionne.
OriginalL'auteur msj121
Vous pouvez utiliser un JLabel et incorporer le texte avec du code html.
N'est-il pas à l'encontre du but si vous devez ajouter votre propre mais les sauts de ligne?
OriginalL'auteur michelemarcon