2016-10-16 5 views
1

J'utilise Java JDK 1.6 et j'ai un problème avec JTextPane pour afficher du texte avec une police à espacement fixe. Dès que j'ajoute un caractère UTF8, la hauteur de ligne dans le panneau de texte est réduite (pour tout le texte déjà dans le volet et aussi tout le texte ajouté plus tard). Comment puis-je éviter ça? Je voudrais avoir la hauteur de ligne normale.Java JTextPane modifie la hauteur de ligne lorsque le caractère UTF8 est ajouté

Voici quelques exemples de code:

class AttributedTextPane extends JTextPane 
    { 

     private DefaultStyledDocument defaultStyledDocument; 

     protected AttributedTextPane() 
     { 
      this.defaultStyledDocument = new DefaultStyledDocument(); 
      this.setDocument(defaultStyledDocument); 

      this.setContentType("text/plain"); 
      ... 
     } 
    } 
    ... 

Ce volet est intégré dans un JInternalFrame. Création du panneau et le réglage de la police monospaced souhaitée:

Font font = new Font("DejaVu Sans Mono", Font.PLAIN, 11); 
    AttributedTextPane pane = new AttributedTextPane(); 
    pane.setFont(font); 

Pour afficher le texte souhaité, je l'appelle pane.setText (...); Dès que j'ajoute le caractère UTF8, la hauteur de la ligne change, voir la capture d'écran au http://i.imgur.com/Fq7XBJB.png. Y at-il un moyen d'éviter que la hauteur de la ligne soit modifiée? Merci, Deejay

Répondre

0

Vous pouvez essayer de régler/forcer une hauteur de ligne comme ceci:

MutableAttributeSet jTextPaneSet = new SimpleAttributeSet(pane.getParagraphAttributes()); 
StyleConstants.setLineSpacing(jTextPaneSet, 1.5f); //replace float 1.5f with your desired line spacing/height 

Source:

http://docs.oracle.com/javase/8/docs/api/javax/swing/JTextPane.html#setParagraphAttributes(javax.swing.text.AttributeSet,%20boolean)

https://docs.oracle.com/javase/7/docs/api/javax/swing/text/StyleConstants.html#setLineSpacing(javax.swing.text.MutableAttributeSet,%20float)

+0

Merci pour votre aide, mais en utilisant StyleConstants .setLineSpacing (...) semble ne pas aider. Je l'ai testé, mais ça n'a rien changé. Changer d'autre paramètre de style (comme la couleur, gras, italique) fonctionne bien, mais pas d'interligne. – Deejay

+1

Désolé, je dois corriger mon dernier commentaire. Il semble que c'était déjà en retard et j'ai donc fait quelques erreurs. L'utilisation de StyleConstants.setLineSpacing (...) fonctionne bien, au moins si vous ne manquez pas de définir les nouveaux attributs dans le volet: 'MutableAttributeSet jTextPaneSet = new SimpleAttributeSet (pane.getParagraphAttributes()); StyleConstants.setLineSpacing (jTextPaneSet, 0.2f); pane.setParagraphAttributes (jTextPaneSet, true); ' Merci, sorifiend! – Deejay