のソース コードはsetCaretOffset()
、テキストの長さよりも大きいオフセットを使用すると、代わりにテキストの長さが使用され、実質的にテキストの末尾にキャレットが配置されることを示しています。したがってInteger.MAX_VALUE
、オフセットとして設定することは、テキストの長さのチェックを必要とせずに実行可能なオプションです。
フラッシュが実際に終了したときに通知を受け取ることができない場合は、キャレットの配置を数百ミリ秒遅らせることをお勧めします。ユーザーの気を散らすことはなく、堅牢なソリューションを提供します。
参考までに、のソースコードは次のsetCaretOffset()
とおりです。
public void setCaretOffset(int offset) {
checkWidget();
int length = getCharCount();
if (length > 0 && offset != caretOffset) {
if (offset < 0) {
offset = 0;
} else if (offset > length) {
offset = length; // <-- use the length as offset
} else {
if (isLineDelimiter(offset)) {
// offset is inside a multi byte line delimiter. This is an
// illegal operation and an exception is thrown. Fixes 1GDKK3R
SWT.error(SWT.ERROR_INVALID_ARGUMENT);
}
}
setCaretOffset(offset, PREVIOUS_OFFSET_TRAILING);
// clear the selection if the caret is moved.
// don't notify listeners about the selection change.
if (blockSelection) {
clearBlockSelection(true, false);
} else {
clearSelection(false);
}
}
setCaretLocation();
}