2010-08-10 4 views
0

동적으로 생성 된 사용자 정의 JPanel 객체를 JScrollPane의 JPanel에 표시하는 팝업 메뉴가 있습니다. 팝업 메뉴는 사용자에게 권장 사항을 표시하고 최상위 요소는 가장 관련성이 높은 권장 사항입니다. 나는 창을 표시 JPopupMenu를 사용하고 있습니다 :팝업 윈도우의 JScrollPane이 프로그래밍 방식으로 위로 스크롤되지 않습니다.

JPanelTemplatePopup jptep = new JPanelTemplatePopup(); 
JPopupMenu popup = new JPopupMenu(); 
popup.add(jptep); 
popup.show(this, 500, 100); 

문제는, 나는 최상위 요소에 JScrollPane의 스크롤이 먼저 표시 할 수 없습니다. 나는 시도했다 :

  • .getViewPort(). setViewPosition (새로운 포인트) (0,0));
  • .scrollRectToVisible (firstelement.getBounds());

validate() s 이전 및 이후. 내가하는 일과 상관없이, 창이 팝업 될 때 스크롤 창은 항상 같은 위치에 있습니다.

나는 심지어 창을 표시하기 전에 일어난 작업이 무시되었다고 생각했기 때문에 클래스에서 공용 메서드를 만들고 호출하여 창을 표시 한 후 스크롤하도록했습니다. 아무것도 바뀌지 않았다.

도와주세요,

엠레

+0

나는이 경쟁 조건과 유사하다 생각합니다. 팝업이 표시된 후 * 스크롤바를 업데이트해야합니다. 팝업이 완전히 표시 될 때 액션을 트리거하는 리스너를 찾아야한다고 생각합니다. – Emre

답변

0

은 그래, 이것에 대한 해결 방법을 발견했다.

문제를 사용자 정의 JPanel 객체에있는 JEditorPane으로 좁혔습니다. 그 내용은 프로그램에 의해 동적으로 업데이트되었습니다. 객체를 생성하는 동안 setText 메서드를 사용하여 JEditorPanes의 내용을 설정했습니다. 텍스트를 문자열로 설정하여 캐럿 위치를 업데이트하면 스크롤 창이 아래로 스크롤됩니다.

난 그냥 생성자에이 삽입 문제가 수정되었습니다 :

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