Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法返回给定JTextPane位置的行号?_Java_User Interface_Swing_Jtextpane - Fatal编程技术网

Java 方法返回给定JTextPane位置的行号?

Java 方法返回给定JTextPane位置的行号?,java,user-interface,swing,jtextpane,Java,User Interface,Swing,Jtextpane,我正在寻找一种方法,在启用换行的JTextPane中计算给定文本位置的行号 例如: 这是一条非常非常非常非常非常非常非常非常非常非常非常非常非常非常长的线。 这是另一条非常非常非常非常非常长的线。| 光标位于第四行,而不是第二行 是否有人可以向我提供该方法的实现: int getLineNumber(JTextPane pane, int pos) { return ??? } 试试这个 /** * Return an int containing the wrapped l

我正在寻找一种方法,在启用换行的JTextPane中计算给定文本位置的行号

例如:

这是一条非常非常非常非常非常非常非常非常非常非常非常非常非常非常长的线。
这是另一条非常非常非常非常非常长的线。|

光标位于第四行,而不是第二行

是否有人可以向我提供该方法的实现:

int getLineNumber(JTextPane pane, int pos)
{
     return ???
}
试试这个

 /**
   * Return an int containing the wrapped line index at the given position
   * @param component JTextPane
   * @param int pos
   * @return int
   */
  public int getLineNumber(JTextPane component, int pos) 
  {
    int posLine;
    int y = 0;

    try
    {
      Rectangle caretCoords = component.modelToView(pos);
      y = (int) caretCoords.getY();
    }
    catch (BadLocationException ex)
    {
    }

    int lineHeight = component.getFontMetrics(component.getFont()).getHeight();
    posLine = (y / lineHeight) + 1;
    return posLine;
  }
使用不同样式格式化的文本片段的替代方法

您可以尝试以下方法:

public int getLineNumberAt(JTextPane pane, int pos) {
    return pane.getDocument().getDefaultRootElement().getElementIndex(pos);
}

请记住行号总是从0开始。

jtextpane类能够支持可变字体大小,这种方法在这种情况下将失败。