如何设置JtextPane中的行距?

问题描述 投票:0回答:4

首先,我像这样设置 JTextPane:

HTMLEditorKit editorKit = new HTMLEditorKit();
HTMLDocument document = (HTMLDocument) editorKit.createDefaultDocument();
JTextPane textPane = new JTextPane();
textPane.setContentType("text/html");
textPane.setDocument(document);

我想在 JtextPane 中设置行间距,这是我的想法,但它不起作用:

SimpleAttributeSet aSet = new SimpleAttributeSet();
StyleConstants.setLineSpacing(aSet, 50);
textPane.setParagraphAttributes(aSet, false);

我错了?

java swing line jtextpane spacing
4个回答
3
投票

当你打电话时

textPane.setParagraphAttributes(aSet, false);
它尝试将行距应用于选择,但没有选择任何内容

换个说法

document.setParagraphAttributes(0, document.getLength(), attr, replace);

2
投票

要设置 JTextPane 的样式,您可以使用样式表:查找 HtmlEditorKit#setStyleSheet

StyleSheet sh = editorKit.getStyleSheet();
sh.addRule("body {line-height: 50px}");

1
投票

我一直在努力解决这个问题,然后在方法

public void setParagraphAttributes(AttributeSet attr, boolean replace)
的API中,我发现了这个:

如果有选区,则属性将应用于与选区相交的段落。如果没有选择,属性将应用于当前插入符号位置的段落。

所以OP的方法是可行的,但是你必须在设置行距之前应用

textPane.selectAll()
你只需要做一次,所有附加到这个
JTextPane
的文本将具有相同的行距,即使设置行距时窗格中可能没有文本。我在实例化它时执行此操作。

因此对我有用的代码是:

/**
 * Select all the text of a <code>JTextPane</code> first and then set the line spacing.
 * @param the <code>JTextPane</code> to apply the change
 * @param factor the factor of line spacing. For example, <code>1.0f</code>.
 * @param replace whether the new <code>AttributeSet</code> should replace the old set. If set to <code>false</code>, will merge with the old one.
 */
private void changeLineSpacing(JTextPane pane, float factor, boolean replace) {
    pane.selectAll();
    MutableAttributeSet set = new SimpleAttributeSet(pane.getParagraphAttributes());
    StyleConstants.setLineSpacing(set, factor);
    txtAtributosImpresora.setParagraphAttributes(set, replace);
}

注意:它将用 factor*(文本行高) 替换当前行距,而不是 factor * 原始行距。够奇怪的。

如果

JTextPane
JScrollPane
中并且文本长度太长,它会滚动到最底部。通常我们想看到顶部。要重置滚动的位置,最后你可以添加:

pane.setCaretPosition(0); //scroll to the top at last.

P.S.:要设置段落边距,我们有:

textPane.setMargin(new Insets(10, 5, 10, 5)); //top, left, bottom, right

0
投票

更改行距之前设置字体和文档:

  private void changeLineSpacing(JTextPane pane) {
  SimpleAttributeSet set = new SimpleAttributeSet(pane.getParagraphAttributes());
  StyleConstants.setLineSpacing(set, 0.5F);
  pane.setParagraphAttributes(set, true);
}
© www.soinside.com 2019 - 2024. All rights reserved.