Java Swing-JScrollPane 사용 및 맨 위로 스크롤


82

JScrollPane을 사용하여 텍스트 편집기 역할을하는 텍스트 구성 요소가있는 JFrame에서 스크롤을 허용하고 있습니다. 이 편집기에서 텍스트를 설정 한 후 맨 위로 스크롤하여 파일 시작 부분에 무엇이 있는지 확인할 수 있습니다.

누구든지 이것을하는 방법을 알고 있습니까?

java  swing 

답변:


137

텍스트 컴포넌트에서 setCaretPosition (0) 을 호출 하면 맨 위로 스크롤됩니다.


당신이 맞습니다. 문제는 캐럿이 텍스트 구성 요소의 끝에 있다는 것입니다. 텍스트 편집기에서 'setText (...)'를 호출 한 후에도 작동합니다. (JScrollPane 내부의 텍스트 패널로 JEditorPane 인스턴스로 테스트되었습니다).
Guillaume

36

텍스트 구성 요소를 사용하지 않는 경우 여기에 게시 된 스레드를 살펴보십시오 .... JScrollPane에 스크롤 막대 설정

그들의 해결책은 invokeLater를 통해 스레드를 스핀 오프하는 것입니다.

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

1
이 .. 내 질문에 가장 가까운 답변입니다 stackoverflow.com/questions/42961012/... 패널이 JScrollPane의 내부에있는 경우 그러나, 방법이 방법을 사용할 수 있습니까?
에서 - 젊은 Choung

3
invokeLater스레드를 스핀 오프하지 않고 현재 이벤트 (예 : 버튼 클릭 invokeLater또는를 호출하는 코드의 컨텍스트 ) 및 이미 대기열에 추가 된 다른 이벤트가 완료된 후 실행될 이벤트를 대기열에 추가합니다.
Radiodef 2018-08-02

10

이것은 작동합니다.

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

9

텍스트 구성 요소 setCaretPosition(0)바로 뒤에 메서드를 사용할 수 있습니다 setText(String t).


1
@Craig의 이전 답변 사본.
Karl Richter


7

이것을 시도 할 수 있습니다.

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

JavaDocs에 따르면 setViewPosition ()은 다음과 같이 작동합니다.

뷰포트의 왼쪽 상단 모서리에 나타나는 뷰 좌표를 설정합니다. 뷰가 없으면 아무 작업도 수행하지 않습니다.


4
이것은 나를 위해 작동하지 않았습니다 .ScrollPane이 맨 위로 점프 한 다음 즉시 다시 맨 아래로 떨어집니다.
jwoolard

그것은 나를 위해 일했습니다 ¯ \ _ (ツ) _ / ¯ JScrollPane 내부에 JTable이 있습니다.
mikato

@jwoolard 예, 여기에 제시된 솔루션은 제가 만난 많은 경우에서 작동하지 않습니다. 하지만 오늘 아침에 제가 제시 한 해결책을 기록해 두십시오.
Richard T

2

방법은 다음과 같습니다.

textArea.setSelectionStart(0);
textArea.setSelectionEnd(0); 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.