首先,我将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);
我错了?
答案 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.