簡體   English   中英

Java-獲取/設置內容類型為“ text / html”的JTextPane的行高

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM