Astăzi lucram cu un widget Text (org.eclipse.swt.widgets.Text) și am avut nevoie să setez manual poziția caret-ului după un apel al metodei setText().
Am descoperit în Javadoc metoda getCaretPosition(), care returnează un int, însă API-ul nu oferă și o metodă setCaretPosition().
Căutând pe Internet soluții la problema mea, am găsit post-uri despre cum se poate muta caret-ul la sfârșitul textului, folosind metoda setSelection(int start):
textWidget.setSelection(textWidget.getText().length());
unde textWidget este o instanță a clasei Text.
Pentru mai multe detalii, vezi post-ul de pe StackOverflow.
De asemenea, API-ul ofera o variantă overloaded a metodei setSelection(int start), sub forma setSelection(int start, int end), indecșii start și end corespunzând poziției caret-ului.
Astfel, am scris următoarea soluție:
int caretPosition = textWidget.getCaretPosition();
textWidget.setText( newValue );
textWidget.setSelection( caretPosition, caretPosition );
Prin acest truc am setat poziția caret-ului la valoarea anterioară apelului metodei setText(), stabilind o selecție vidă.
Încă nu mi-e clar dacă simplul fapt că am fost nevoit să resetez manual poziția caret-ului indică un design defectuos sau nu, dar sper să revin cu un răspuns.
Subscribe to:
Posts (Atom)