我使用JavaJDK1.6,在使用JTextPane显示单一字体的文本时遇到了问题。一旦添加了类似于UTF8 8字符,Text窗格中的线条高度就会降低(对于窗格中的所有文本,以及稍后添加的所有文本)。我怎么才能避免这种情况?我想要正常的线高。
下面是一些示例代码:
class AttributedTextPane extends JTextPane
{
private DefaultStyledDocument defaultStyledDocument;
protected AttributedTextPane()
{
this.defaultStyledDocument = new DefaultStyledDocument();
this.setDocument(defaultStyledDocument);
this.setContentType("text/plain");
...
}
}
...此窗格集成到JInternalFrame中。创建面板并设置所需的单间距字体:
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
发布于 2016-10-16 10:01:16
您可以尝试设置/强制设置这样的直线高度:
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)
发布于 2022-09-10 11:00:28
老问题,但我已经挣扎了一段时间,虽然是一个JTextArea。解决方案是要么有一个VM param -Di18n=true,要么将i18n属性放在文档中。
我的测试代码:
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。高度。
https://stackoverflow.com/questions/40068765
复制相似问题