【问题标题】:Method that returns the line number for a given JTextPane position?返回给定 JTextPane 位置的行号的方法?
【发布时间】:2010-09-11 06:11:20
【问题描述】:

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

例子:

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

光标在第四行,而不是第二行。

谁能提供方法的实现:

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

【问题讨论】:

    标签: java user-interface swing jtextpane


    【解决方案1】:

    试试这个

     /**
       * 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;
      }
    

    【讨论】:

    • jtextpane 类能够支持可变字体大小,这种方法在这种情况下会失败。
    【解决方案2】:

    http://java-sl.com/tip_row_column.html 一种适用于不同样式格式的文本片段的替代方法

    【讨论】:

      【解决方案3】:

      你可以试试这个:

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

      请记住,行号始终从 0 开始。

      【讨论】:

        猜你喜欢
        • 2015-06-18
        • 2018-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-01
        相关资源
        最近更新 更多