首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当添加JTextPane字符时,UTF8更改行高

当添加JTextPane字符时,UTF8更改行高
EN

Stack Overflow用户
提问于 2016-10-16 09:22:21
回答 2查看 218关注 0票数 1

我使用JavaJDK1.6,在使用JTextPane显示单一字体的文本时遇到了问题。一旦添加了类似于UTF8 8字符,Text窗格中的线条高度就会降低(对于窗格中的所有文本,以及稍后添加的所有文本)。我怎么才能避免这种情况?我想要正常的线高。

下面是一些示例代码:

代码语言:javascript
复制
    class AttributedTextPane extends JTextPane
    {

        private DefaultStyledDocument defaultStyledDocument;

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

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

此窗格集成到JInternalFrame中。创建面板并设置所需的单间距字体:

代码语言:javascript
复制
    Font font = new Font("DejaVu Sans Mono", Font.PLAIN, 11);
    AttributedTextPane pane = new AttributedTextPane();
    pane.setFont(font);

要显示所需的文本,我调用pane.setText(.);一旦添加了UTF8字符,行高就会发生变化,请参见http://i.imgur.com/Fq7XBJB.png的屏幕截图。有什么办法可以避免线高改变吗?谢谢,Deejay

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-16 10:01:16

您可以尝试设置/强制设置这样的直线高度:

代码语言:javascript
复制
MutableAttributeSet jTextPaneSet = new SimpleAttributeSet(pane.getParagraphAttributes());
StyleConstants.setLineSpacing(jTextPaneSet, 1.5f); //replace float 1.5f with your desired line spacing/height

来源:

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
EN

Stack Overflow用户

发布于 2022-09-10 11:00:28

老问题,但我已经挣扎了一段时间,虽然是一个JTextArea。解决方案是要么有一个VM param -Di18n=true,要么将i18n属性放在文档中。

我的测试代码:

代码语言:javascript
复制
import javax.swing.JTextArea;

public class Test {
    public static void main(String[] argv) {
        JTextArea ta = new JTextArea();
        //ta.getDocument().putProperty("i18n", Boolean.TRUE);
        ta.setText("A");
        System.out.println(ta.getPreferredSize()); // - height 16 without i18n and using default font, 15 with i18n
        ta.setText("\ud8ff\udc05"); // surrogate pair
        System.out.println(ta.getPreferredSize()); // - height 15
        ta.setText("A");
        System.out.println(ta.getPreferredSize()); // - height 15
    }
}

当i18n未启用并附加文档时,创建的元素是PlainView/WrappedPlainView,它们根据FontMetrics高度返回高度。

启用i18n时,元素是包含不同计算高度的GlyphView的PlainParagraph。

如果i18n未启用,并且文档附加了代理项对,则由于SwingUaryties2.isComplexLayout返回true,i18n属性将自动设置为真,然后所有元素都被创建为包含返回不同(总是较小的?)的GlyphView的PlainParagraph。高度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40068765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档