2014-09-15 6 views
0

JFrame에서 시작되는 JDialog가 있습니다. 이 Dialog에는 JDialog의 setVisible 함수가 'true'로 호출되기 전에 추가되는 일부 내용이 들어있는 JScrollPane이 있습니다.setVisible을 호출 한 후 스크롤 막대 값을 설정합니까? (invokeLater를 사용하지 않고)

내 문제는 콘텐츠를 추가하면 setVisible이 호출 될 때 스크롤 막대의 위치가 변경된다는 것입니다. setVisible이 블로킹하기 때문에, setVisible 후에 스크롤 바의 값을 변경하기위한 호출을 할 수 없습니다.

invokeLater 기능을 타이밍에서 불확실하게 사용하고 싶지 않습니다. (단순히 다른 방법은 없지만 괜찮 으면 좋겠지 만 피할 수 있다면 '할 때 사용'을 좋아하지 않습니다.)

invokeLater를 사용하지 않고도 사용자 상호 작용에 의존하지 않는 호출 post-setVisible을 보장 할 수있는 방법이 있습니까?

+0

팩 설명에 혼란 스럽습니다 ... 가능한 한 빨리 데모를 얻으려고하는데, 순간적으로 나누어서 예제를 만듭니다. –

답변

0

이렇게하면됩니다. 당신이 실행 순서와는 viewToScroll 구성 요소는 상위 계층 (HierarchyListener.hierarchyChanged)에 추가 될 때를들을 수있는 비트 타이밍으로 조정할 것을 선호하는 경우

private void scrollTo(final JComponent viewToScroll, final Rectangle bounds) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      viewToScroll.scrollRectToVisible(bounds); 
     } 
    }); 
} 

그러나, 다음 위의 메소드를 호출 (다음 제거 그 듣는 사람).

+0

게시물을 주셔서 감사합니다, 나는 그것에 invokeLater를 사용하여 얻을 방법을 알아요. 이 호출을 사용하여 스크롤바의 값을 직접 0으로 설정하면됩니다. 그러나 나는 invokeLater를 사용하지 않는 것을 싫어한다. (불확실한 실행은 나를 귀찮게한다.) invokeLater를 사용하지 않고 이것을 수행 할 방법을 찾고자했다. –

+0

내가 그것을 쓸 때 두 번째 단락에 완전히 떨어져 있습니다. viewToScroll 구성 요소가 setVisible에서 스크롤 막대의 최종 조정을 유발하는 실행입니까? –