如何在JtextPane中设置行间距?

时间:2013-08-13 08:53:54

标签: java swing line jtextpane spacing

首先,我将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);

我错了?

3 个答案:

答案 0 :(得分:2)

要设置JTextPane样式,您可以使用样式表:Look for HtmlEditorKit#setStyleSheet

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

答案 1 :(得分:2)

致电textPane.setParagraphAttributes(aSet, false);时 它尝试将行间距应用于选择但未选择任何内容

以另一种方式调用

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

答案 2 :(得分:1)

我正在努力解决这个问题,然后在方法public void setParagraphAttributes(AttributeSet attr, boolean replace)的API中,我找到了这个:

  

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

所以OP的方法可行,,但您必须在设置行间距之前应用textPane.selectAll()您只需执行一次,并且所有文本都附加到此{{} 1}}将具有相同的行空间,即使您在设置行间距时窗格中没有文本。我会在实例化时执行此操作。

因此,为我工作的代码是:

JTextPane

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

如果/** * 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); } 位于JTextPane且文字长度过长,则会滚动到最底部。通常我们希望看到顶部。要重置滚动的位置,最后可以添加:

JScrollPane

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

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