Java Swing - Korzystanie z JScrollPane i przewijanie z powrotem do góry


82

Używam JScrollPane, aby umożliwić przewijanie w JFrame, który ma składnik tekstowy, który służy jako edytor tekstu. Po ustawieniu tekstu w tym edytorze chcę go przewinąć z powrotem do góry, abyś mógł zobaczyć, co jest na początku pliku.

Czy ktoś wie, jak to zrobić?

java  swing 

Odpowiedzi:


136

Wywołanie setCaretPosition (0) w komponencie tekstowym spowoduje jego przewinięcie do góry.


Masz rację, problem polegał na tym, że daszek znajdował się na końcu komponentu tekstowego. Działa również po wywołaniu „setText (...)” w edytorze tekstu. (testowane z instancją JEditorPane jako panelem tekstowym wewnątrz JScrollPane).
Guillaume,

37

Na wypadek, gdybyś nie korzystał z komponentu tekstowego, spójrz na zamieszczony tutaj wątek .... Ustawianie paska przewijania w JScrollPane

Ich rozwiązaniem jest wyodrębnienie wątku za pomocą invokeLater

final JScrollPane scroll = new JScrollPane(text);
javax.swing.SwingUtilities.invokeLater(new Runnable() {
   public void run() { 
       scroll.getVerticalScrollBar().setValue(0);
   }
});

1
To jest najbliższa odpowiedź na moje pytanie. Stackoverflow.com/questions/42961012/… Jednak jak można użyć tej metody, jeśli w JScrollPane znajduje się panel?
In-young Choung

3
invokeLaternie wydziela wątku, po prostu kolejkuje zdarzenie, które ma być wykonane po bieżącym zdarzeniu (np. kliknięciu przycisku lub jakimkolwiek kontekście wywoływanego kodu invokeLater) i zakończeniu innych już zakolejkowanych zdarzeń.
Radiodef

10

To sprawi, że praca:

DefaultCaret caret = (DefaultCaret) textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);

9

Możesz użyć tej metody setCaretPosition(0)zaraz po setText(String t)komponencie tekstowym.


1
Kopia wcześniejszej odpowiedzi @ Craiga.
Karl Richter,


7

Możesz spróbować tego:

 scrollPane.getViewport().setViewPosition(new Point(0,0));

Zgodnie z JavaDocs setViewPosition () zachowuje się następująco:

Ustawia współrzędne widoku, które pojawiają się w lewym górnym rogu rzutni, nic nie robi, jeśli nie ma widoku.


4
To nie zadziałało - ScrollPane przeskakuje na górę, a następnie natychmiast ponownie opada na dół.
jwoolard

U mnie zadziałało ¯ \ _ (ツ) _ / ¯ Mam JTable w moim JScrollPane.
mikato

@jwoolard Tak, przedstawione tutaj rozwiązanie nie działa w wielu przypadkach, z którymi się spotkałem. ALE, zwróć uwagę na rozwiązanie, które postawiłem dziś rano.
Richard T

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.