[英]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.