2010-11-08 40 views
0

使用JEditorPane,有什麼方法可以判斷插入符號是否在最後一行?我無法在API或更重要的JEditorPane派生的JTextComponent中找到任何東西。當用戶使用向下箭頭鍵向下移動文本時,我需要找出這一點。我現在的想法是這樣的:JEditorPane是最後一行

private boolean isEndOfText() { 
    int tmpCurrent = editor.getCaretPosition(); 

    editor.getActionMap().get(DefaultEditorKit.endLineAction).actionPerformed(null); 
    int tmpEnd = editor.getCaretPosition(); 
    try { editor.setCaretPosition(tmpEnd + 1); } catch (Exception e) { editor.setCaretPosition(tmpCurrent); return true; } 
    editor.setCaretPosition(tmpCurrent); 
    return false; 
} 

每次按下向下鍵此代碼將運行,並且如果如果光標被放在發生錯誤時將返回它是否實際上是在文本的末尾,通過檢測在最後一個可能的位置之後(如果它實際上是最後一行),否則它意味着文本的末尾還沒有達到。

回答

2

您應該能夠使用Text Utilities。一種方法返回總行數,另一種方法返回插入行的行數。

我從來沒有玩過JEditorPane那麼多,因爲我不喜歡它的HTML支持。您也可以使用editor.getDocument()。getLength()來確定插入符號是否在文檔末尾。這將與JTextArea或只顯示文本而不是HTML的JTextPane一起使用。不確定它是如何在JEditorPane中工作的。

+0

那麼窗格仍然只使用直接文本,但語法突出顯示,所以我不相信HTML會遇到我的問題,無論如何。 – 2010-11-09 11:33:01

+0

我的觀點是HTML文檔充滿HTML標籤。所以如果你使用editor.getText(),而不是editor.getDocument()。getText()我相信你會得到兩個不同的字符串,一個只包含文本,另一個將包含所有的標籤。所以你需要小心你如何比較偏移量。我更喜歡使用帶屬性的JTextPane來設置文本風格,然後文本字符串是相同的,因爲屬性不是文檔的一部分。無論如何,我的建議是否有助於解決問題? – camickr 2010-11-09 16:15:05

+0

充其量只是如此。雖然我喜歡看到其他人如何解決同樣的問題,但我已經有了一個當前的在線檢測系統,方法是檢查使用箭頭鍵以及刪除,輸入和退格。我還有一個系統,可以保持比所給方法更高效的線路數量。 我想我的答案實際上來自我自己做更多的編碼,這反過來會增加更多的功能,我可以稍後使用它來使現有的功能更有效。有沒有一個術語?無論如何感謝您的答案。 – 2010-11-09 23:22:14

1

有可能是一個更好的辦法,但你可以試試這個:

return editor.getText().indexOf("\n", editor.getCaretPosition()) == -1; 
+0

我唯一擔心的是如果用戶有一個相當大的文件。 – 2010-11-08 22:34:13