2013-09-05 2 views
1

사용자 정의 자동 완성 JTextField가 있습니다. JPopupMenu를 사용하여 선택 항목을 포함합니다. 이 메서드를 사용하여 JTextField 바로 아래에서 JPopupMenu를 팝하고 싶습니다.구성 요소를 일관되게 "섀도 잉"하는 JPopupMenu를 얻는 방법

Rectangle r = textField.getBounds(); 
popup.show(textField, (int)(r.getX()), (int)(r.getY() + textField.getHeight)); 
popup.setVisible(true); 

구성 요소를 간단한 JFrame에 넣을 때 작동합니다. 그러나 JScrollPane을 사용하여 복잡한 레이아웃에 컴포넌트를 배치 할 때. 위치가 무작위로 일관성이 없습니다. 나는 popupMenu가 어떤 조건에서도 textField를 "그림자"하게하고 싶습니다. 어떻게해야합니까? 감사.

+1

getBounds는 부모를 기준으로 한 컴퍼넌트의 위치를 ​​돌려줍니다. 대신 [getLocationOnScreen] (http://docs.oracle.com/javase/7/docs/api/java/awt/Component.html#getLocationOnScreen()) – MadProgrammer

답변

3

팝업 위치는 relative to the parent component입니다.

popup.show(textField, 0, textField.getHeight()); 

바로 아래에 넣어야합니다. textField.

+0

을 사용해보십시오. 감사합니다.이 방법이 유용합니다. 그러나 한 가지는 있습니다. JScrollPane의 스크롤 바의 초기 상태가 가시화되면, 최초의 pop-up 위치가 조금 이동합니다. 두 번째 팝업에서 정상으로 돌아갑니다. 이게 무슨 원인인지 아십니까? – William

+0

@ 윌리엄 나는 그것을 모른다. 테스트 할 코드가없는 것은 아닙니다. 팝업에는 몇 가지 미묘한 문제가 있습니다. 예를 들어 외관 및 느낌이 일반적이지 않은 경계선이있는 패널을 사용하는 것과 같이 비정상적으로 수행하는 경우 처음에는 크기가 약간 잘못 될 수 있습니다. – kiheru

관련 문제