2017-12-07 1 views
1

주어진 양식에서 특정 구성 요소를 다른 구성 요소로 바꿉니다.scrollComponentToVisible을 사용하여 구성 요소를 강제로 올바르게 적용 할 수 없음

원본 구성 요소는 일련의 TextField이며 새로운 양식은 정보 용 텍스트 및 버튼입니다. 우리는 첫 번째 것을 숨기고 두 번째 것을 보여줍니다 (UI 디자이너는 컨테이너 내에 두 컨테이너를 모두 가지고 있습니다).

다양한 값을 사용하여 scrollRectToVisible을 사용해 보았지만 스크롤하는 것과 아무런 차이가없는 것 같습니다.

continueButtonContainer.setHidden(false); 
f.forceRevalidate(); 
Button continueButton = 
    (Button)StateMachine.GetInstance().findByName("ButtonContinue", f); 
f.scrollComponentToVisible(continueButtonContainer); 
f.scrollComponentToVisible(continueButton); 

계속 버튼이 화면 상단 근처에있을 것으로 예상됩니다. 나는 scrollComponentToVisible 라인 (들)에 넣어 전에

화면이 버튼을 계속 표시하기 전에 스크롤 경우

는 버튼이 화면 하단에 바로 종료 (이를 화면의 아래쪽에 있었다.

사용자가 화면을 스크롤 한 후, 버튼이 그것을 할 필요가 어디까지 가고, 거기에 유지됩니다.

를 화면이 스크롤되지 않으면 버튼이 있어야 할 곳에 나타납니다.

내가 아마 수있어 보이지 않는 컨테이너를 버튼 아래에 추가하고 화면 위로 밀어 넣으면되지만, 약간 더 견고한 솔루션.

답변

0

여기에는 몇 가지 문제가 있습니다. 아주 드물게 사용되어야하는 forceRevalidate을 먼저 사용하고 있습니다.

두 번째로 Form에서 호출하는 것으로 보입니다. 약간 오해의 소지가 있습니다. 이 것으로 보이지만 :

f.add(myCmp); 

양식에 구성 요소를 추가 그것은에 대한 동의어가 정말 : 당신이 할 실제로 것입니다 스크롤 컨테이너에 scrollComponentToVisible를 호출해야하기 때문에 중요

f.getContentPane().add(myCmp); 

이상적으로는 상기 구성 요소의 직접적인 부모가되어야합니다. 귀하의 경우 그것은 콘텐츠 창이라고 가정하지만 레이아웃 등에 따라 다릅니다.

마지막 부분은 레이아웃 작업을하게합니다. 양식을 표시하기 전에 이것을 호출하면 작동하지 않을 수 있습니다. 전환이 발생하면 양식에 시간이 걸릴 수 있으므로 show을 호출 한 후에는 의미가 없습니다. show listener를 사용하거나 laidOut 콜백 메소드를 오버라이드하여 이와 같은 작업을 수행 할 수 있습니다.

관련 문제