2012-10-31 2 views
0
nspQuestionArea = new NScrollPane(); 
nspQuestionArea.setVerticalScrollBarPolicy 
(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

nspQuestionArea.setVerticalScrollBarPolicy 
(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 

nspQuestionArea.setViewportView(getNpQuestionArea());  
//where getNpQuestionArea() return a panel  
nspQuestionArea.getVerticalScrollBar().setValue(0);    
nspQuestionArea.getVerticalScrollBar().setValue(0);  
nspQuestionArea.getVerticalScrollBar().setUnitIncrement(5);  
nspQuestionArea.setOpaque(false); 

패널을 열면 패널의 가운데에서 수직 스크롤 막대가 시작되고 상단에서 항상 스크롤 막대를 시작해야합니다.상단에서 항상 수직 스크롤 막대 시작

그런 방법이 있습니까? 사전

+0

네, 할 수있는 방법이 있지만 뷰포트보기에서 자동으로 변경할 수 있습니다. 예를 들어 편집 가능한 JTextPane은 자동으로 캐럿 위치를 표시하려고 시도하며 자동으로 스크롤을 트리거 할 수 있습니다. 조심스럽게 문제를 검토 할 수 있도록 [SSCCE] (http://sscce.org) 게시 고려 –

답변

1

에서

덕분에 나는 NScrollPanegetNpQuestionArea()에서 반환 된 구성 요소가 무엇인지, 또는 정말로 확실하지 않다,하지만 그들은 아마 JComponent의 단지 확장 것 같습니다. 이 경우, 당신은 아마 NScrollPane 당신이 NScrollPane의 생성자에 getNpQuestionArea()에 전달하면, 나는 그것이 자동으로한다고 생각, JScrollPane의 확장이라고 가정 ... 또한,

getNpQuestionArea().scrollRectToVisible(new Rectangle(0,0,0,0)); 

를 다음 호출 할 수 있습니다 상단에. 그래서,이 같은 ...

nspQuestionArea = new NScrollPane(getNpQuestionArea()); 

당신이 NScrollPane 생성자에 JComponent을 분석하면, 나는 그것이에서 스크롤 막대를 배치 믿고 왼쪽 상단 JComponent의. 그러나 나중에 setViewportView()을 호출하여 JComponent을 추가하면 기본적으로 중앙에 배치됩니다. 그것은 디스플레이를 생성 할 때 JComponent이 배치 된 방식과 관련이 있습니다. 생성자에 추가하면 을 전달한 JComponent의 올바른 크기와 위치로 레이아웃합니다. 그러나 기본값 인 NScrollPane을 생성하고 나중에 JComponent으로 지정하면 JComponent에 적절하게 맞추지 않고 기본 크기로 NScrollPane을 만듭니다.

두 가지 모두 시도해보고 어떻게하는지 확인하십시오.

0

setCaretPosition (0) 나를 위해 일했습니다.

관련 문제