2012-12-10 15 views
4

是否有一種方法可以從填充的文本jtextpane中「提取」行數? 如果存在,如果某些行是由於文字換行造成的,它會起作用嗎?如何從jtextpane獲取行數

回答

11

您可以使用Utilities.getRowStart來確定該行的「開始」的JTextPane給你一個結果lineCount。當線條被包裹時,這也將起作用。

int totalCharacters = textPane.getText().length(); 
int lineCount = (totalCharacters == 0) ? 1 : 0; 

try { 
    int offset = totalCharacters; 
    while (offset > 0) { 
     offset = Utilities.getRowStart(textPane, offset) - 1; 
     lineCount++; 
    } 
} catch (BadLocationException e) { 
    e.printStackTrace(); 
} 
+0

只是一個註釋:「這也將工作時線包裹。」意味着如果一條線自動換行,結果數將增加換行量。所以,當你例如。想要顯示行號,你必須檢查一行確實是一行還是因爲自動換行而顯示爲一行。 – Bowi

4

如果定義了一個「行」有多少\n字符JTextPane中文字都在那裏,那麼你可以使用:

JTextPane p = yourJTextPane; 
System.out.println(p.getText().split("\n").length); 
+0

謝謝,儘管我已經試過了。問題是,當jtextPane包裝一行時,它似乎沒有放置「\ n」?我無法真正理解爲什麼。 – vejmartin

+0

不,它沒有。如果這就是你需要的,你不能使用我的答案。 –

0

要跳轉到行選擇的是,我用這個代碼:

int rowSel = Integer.parseInt(tfGoLine.getText()); 

     int rowGo = 0; 
     int lineCount = 0; 
     int totalCharacters = rowSel <= 1 ? 0 : text.getText().length(); 

     try { 
      int last = -1; 
      for (int count = 0; count < totalCharacters; count++) { 
       int offset = Utilities.getRowStart(text, count); 

       if (last != offset) { 
        last = offset; 
        lineCount++; 
        rowGo = offset; 

        if (lineCount == rowSel) { 
         break; 
        } 
       } 
      } 

     } catch (BadLocationException e) { 
     } 

     text.getCaret().setDot(rowGo); 
     text.requestFocus();