Mam proste pytanie Java tutaj. Chcę automatycznie przewinąć tekst do początku ostatniego wiersza obszaru tekstowego utworzonego za pomocą JTextArea. Ilość tekstu w wierszu obszaru tekstowego jest dłuższa niż szerokość pola tekstowego.Automatyczne przewijanie tekstu dla obszaru tekstowego (JTextArea) z pozycją caret ustawioną na początku ostatniej linii
Oto fragment kodu Kiedyś to ustawiłem.
JTextArea textArea = new JTextArea();
DefaultCaret caret = (DefaultCaret)textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
Problem jest teraz z powyższym kodem, domyślnym zachowaniem jest to, że karetka jest automatycznie umieszczony na końcu dokumentu, w rezultacie, na początku część całego obszaru tekstu wychodzi z zakresu . Wolałbym, aby automatyczne przewijanie stało się początkiem ostatniej linii w dokumencie.
Żeby było jasne, tu są dwa zrzuty ekranu,
Co chcę jest pierwszym, ale to, co się dzieje jest drugi.
super rozwiązanie! Ale mam tutaj pytanie. Czy istnieje sposób, w jaki mogę ustawić ta.setCaretPosition (ta.getLineStartOffset (ta.getLineCount() - 1)); tylko jeden raz, zamiast aktualizować go za każdym razem, aby zachować ważność dla całej aplikacji? –
Ponadto, mimo że używasz DefaultCaret caret = (DefaultCaret) ta.getCaret(); caret.setUpdatePolicy (DefaultCaret.ALWAYS_UPDATE); Twój kod działałby również bez tych instrukcji? Jaki jest twój punkt widzenia w tym zakresie? –
@JtheRocker nie, że wiem. Pozycja chroniona porusza się wraz z aktualizacją tekstu. Dlatego oznacza to, że jego lokalizacja musi zostać ponownie obliczona za każdym razem. Prawdopodobnie możesz rozszerzyć JTextArea i przesłonić setText, najpierw wywołując super.setText, a następnie ustaw daszek. Jeśli chodzi o twoje drugie pytanie, jest to kwestia pożądanych zachowań i ergonomii. W twoim pytaniu jest to, o co prosiłeś. Teraz, jeśli szukasz w rzeczywistości przewijania do lewego dolnego rogu przewijania, to szukasz czegoś innego. Jeśli tak, to rozważ umieszczenie kolejnego pytania na SO. –