我一直在努力解决这个问题,然后在方法的 API 中public void setParagraphAttributes(AttributeSet attr, boolean replace)
,我发现了这个:
如果有选择,则属性将应用于与选择相交的段落。如果没有选择,则将属性应用于当前插入符号位置的段落。
所以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*(line height of text)代替当前行间距,而不是factor * original line spacing。够奇怪的。
如果JTextPane
在 a 中JScrollPane
并且文本的长度太长,它将滚动到最底部。通常我们希望看到顶部。要重置滚动的位置,最后你可以添加:
pane.setCaretPosition(0); //scroll to the top at last.
PS:要设置段落边距,我们有:
textPane.setMargin(new Insets(10, 5, 10, 5)); //top, left, bottom, right