[英]Java - getting/setting line height of JTextPane with content type “text/html”
我有一个内容类型为“ text / html”的JTextPane
。 它集成在JScrollPane
。
用户可以在此JTextPane
向下滚动并单击一个按钮。 现在,我想计算JTextPane
的最上面的实际可见行!
我在另一篇文章中找到的这些行:
public Integer getActualDisplayedRows() {
int y1 = jtextpane.getVisibleRect().y;
int lineHeight = jtextpane.getFontMetrics(jtextpane.getFont()).getHeight();
int topMostRow = (int) Math.ceil((double) y1 / lineHeight);
return topMostRow;
}
但这不能正确计算lineHeight
的数字太小。 因此,例如,如果我滚动到第20行,则该方法返回的值将大于20。
我试图通过样式表设置线条的高度(如此处 ):
StyleSheet sh = editorKit.getStyleSheet();
sh.addRule("body {line-height: 50px}");
但是,不管我在此处设置什么像素数,生成的JTextPane
始终具有相同的高度(并且我正在使用body
标签)。
你有什么建议吗??
非常感谢您的帮助!
如果我了解您的要求,您只想知道视口顶部的行号?
这是一些使行位于插入符位置的代码:
public static int getLineAtCaret(JTextComponent component)
{
int caretPosition = component.getCaretPosition();
Element root = component.getDocument().getDefaultRootElement();
return root.getElementIndex( caretPosition ) + 1;
}
不知道这是否适用于带有图像和表格等各种奇怪标记的HTML。在这种情况下,我不确定“ line”的含义是什么。
现在显然插入号将不在视口的顶部,因此您需要修改逻辑以在视口的顶部获得文本的“偏移量”。
因此,您应该能够使用文本窗格的viewToModel(...)
方法。 就像是:
int y = textPane.getVisibleRect().y;
Point p = new Point(5, y);
int offset = textPane.viewToModel( p );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.