2010-11-15 30 views

Répondre

0

Utilisez un JTextPane. Vous pouvez définir les attributs de paragraphe sur "centré" et chaque ligne sera centrée dans le volet de texte. Après avoir créé le volet de texte que vous pouvez faire quelque chose comme:

SimpleAttributeSet center = new SimpleAttributeSet(); 
StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER); 
doc.setParagraphAttributes(0, doc.getLength(), center, false); 
+0

Comment rendre le JTextPane transparent, de sorte que seul le texte dessiné s'affiche? Il doit ressembler à un normal graphics.drawString (...) –

+0

C'est une chaîne graphique normale. Jouez avec le fond, le premier plan, les méthodes opaques pour réaliser ce que vous voulez. Je ne sais pas si vous essayez d'imiter la peinture personnalisée sur un JPanel ou pour un JLabel. – camickr

0

Hey camickr, je ne pense pas que cette solution gère correctement le redimensionnement automatique des polices pour tenir dans des limites. Je dessine essentiellement du texte sur un JScreen (forme sans fenêtre d'une Jframe) pour des raisons de projection de texte, et j'ai besoin que le texte soit conforme aux limites de l'écran, quelle que soit la taille de la police. ajuste automatiquement la taille de police comme nécessaire.

L'alignement central n'est vraiment pas le problème ici. Je peux faire le centre aligné moi-même sans le JTextPane. Le problème est l'ajustement de la police dans les limites. Je ne voulais pas avoir à boucler et vérifier les limites de textlayout à chaque fois après un get de linemeasurer et minimiser la taille de la police jusqu'à ce que ce soit juste, mais il semble que ce soit la seule façon de s'y prendre.

0

J'ai donc créé une classe wrapper autour de LineBreakMeasurer, qui remplit immédiatement une liste de TextLayouts lors de l'instanciation de la classe wrapper. Lors de la génération de cette liste de mises en page, j'ai obtenu la hauteur de ligne de chaque mise en page et l'ai ajoutée de manière incrémentielle à une hauteur de ligne totale. Je peux alors interroger extérieurement ce wrapper pour la hauteur totale de tout son texte et si elle est supérieure à mes limites verticales, je redériver la police avec une taille de police inférieure et repeupler l'arraylist de layouts .... qui peut alors être obtenu à partir de l'arraylist utilisant une méthode getNextLayout(). J'ai également eu cette force de classe wrapper '\ n' à respecter par lineBreakMeasurer en faisant un String [] lines = text.split ("\ n") Puis en exécutant linebreakMeasurer sur chacune de ces lignes que j'ai peuplé l'arrayliste de mises en page.