2016-12-11 17 views
0

많은 질문이 있습니다.하지만 불행하게도 TextArea 내부에서 scrollBar을 자동 스크롤하는 것이 전부입니다.JScrollPane : JPanel에서 자동 스크롤

은 내가 JList을 시뮬레이션하기 위해 JScrollPane를 사용 : 나는 GridLayoutJScrollPane 작은 JPanels를 추가, 그들은 verically 스택.

마지막으로 추가 한 요소 (아래쪽)를 스크롤 막대에 표시하고 싶지만 작동시키지 못합니다.

나는 등의 Text에 대한 답변의 일부를 적용하려고 :

.autoScrolls(true); 

또는

JScrollBar vertical = scollPan.getVerticalScrollBar(); 
vertical.setValue(vertical.getMaximum()); 

과 updatePolicy 변경에 하나라도,하지만 아무것도 외설 JScrollPane의 작동하지 않습니다 텍스트 영역에 얽매이지 않고, 나는 바를 수동으로 스크롤 할 수 있습니다.

vertical.setValue(vertical.getMaximum()); 

는 아래로 줄을 스크롤, 무언가를했지만 거의 2/3 나는 그것을 호출 한 후 스크롤에 .revalidate()을 추가하는 방식, 그리고 때문.

아이디어가 있으십니까?

+0

1) 더 나은 도움을 받으려면 [MCVE] 또는 [Short, Self Contained, Correct Example] (http://www.sscce.org/)를 게시하십시오. 2) JList (적절한 렌더링 구성 요소 포함)를 사용하지 않는 이유는 무엇입니까? –

+0

목록에있는 항목이 복잡한 API에서 왔고 JList가 해당 항목을 올바르게 지원하지 않아서 자체 레이아웃, 맞춤 그래픽, 기능, 오버레이, 마우스 및 드래그 감지, 여러 내부 창, 설정을 가지고 있기 때문에 JList를 사용할 수 없습니다. , 그들은 다른 이벤트 등에 따라 바뀝니다. 이것은 MCVE를 만드는 데 어려움을 겪고있는 이유의 일부입니다. 나는 지식 부족으로 빠져 나온 빠른 해결책을 기대하고있었습니다. –

+0

'이것은 MCVE를 만드는 데 어려움이있는 이유 중 일부입니다. '- 당신이 이야기하는 모든 것들은 'MCVE '. 관련된 것은 패널에 구성 요소를 추가하는 것뿐입니다. 이 패널의 기능은 스크롤링과 관련이 없습니다. – camickr

답변

1

패널에 구성 요소를 추가 한 후에는 레이아웃 관리자가 호출되도록 revalidate()repaint()을 수행해야합니다.

JScrollBar vertical = scollPan.getVerticalScrollBar(); 
vertical.setValue(vertical.getMaximum()); 

그런 다음 코드는 그래서 모든 레이아웃 코드 뒤에 실행되는 Event Dispatch Thread (EDT)의 끝에 추가되어 있는지 확인하기 위해 SwingUtilities.invokeLater()에 위의 코드를 포장.

+0

감사합니다. invokeLater()가 트릭을 수행했습니다. 나는 layoutmanager가 끝나기 전에 새로운 바 위치를 적절하게 설정하고있었습니다. –