我有一個JScrollPane,其JTextArea集作爲其視圖端口。維護JTextArea滾動位置
我連續更新JTextArea上顯示的(多行)文本,每秒約一次。每次文本更新時,JScrollPane都會一直到文本的底部。
相反,我想找出當前顯示爲原始文本中第一行的行號,並將該行作爲文本更新時顯示的第一行(或者新文本沒有那麼多行,然後一直滾動到底部)。
我這樣做的第一次嘗試是讓當前插入符號位置,計算基於該行,然後將文本區域,顯示該行:
int currentPos = textArea.getCaretPosition();
int currentLine = 0;
try {
for(int i = 0; i < textArea.getLineCount(); i++) {
if((currentPos >= textArea.getLineStartOffset(i)) && (currentPos < gameStateTextArea.getLineEndOffset(i))) {
currentLine = i;
break;
}
}
} catch(Exception e) { }
textArea.setText(text);
int newLine = Math.min(currentLine, textArea.getLineCount());
int newOffset = 0;
try {
newOffset = textArea.getLineStartOffset(newLine);
} catch(Exception e) { }
textArea.setCaretPosition(newOffset);
這是我的需求幾乎是可以接受的,但要求用戶在文本區域內單擊以更改插入位置,以便滾動將保持狀態(這不太好)。
我該如何使用(垂直)滾動位置來代替?
我才意識到:JTextArea中處理自己的滾動!這可能破壞了我們控制嵌入JScrollPane的努力。 – 2010-01-12 18:42:01
好的,我得到了它的工作。查看我的更新2. – 2010-01-12 19:32:01