2012-01-30 2 views
0

JPopupMenu와 관련된 질문을 할 수 있습니다.마우스를 클릭 할 때만 팝업 팝업 스윙

내가 알 수있는 한, JPopupMenu는 JMenu를 누르면 (JMenuBar에 있음) 또는 JMenu 위로 마우스를 가져 가면 (JPopupMenu에있는 경우) 열립니다.

그래서 저는 JMenu를 포함하는 JMenuBar ('File'이라고 부름)를 가지고 있습니다. '파일'을 누르면 JPopupMenu가 열려 JMenuItem과 다른 JMenu ('Properties'라고 부르 자)를 포함합니다. 파일 JMenu에있는 것과 같은 속성 JMenu에 동일한 동작을 적용 할 수있는 방법이 있습니까? 사용자가 클릭하고 위로 마우스를 가져갈 때만 JPopup이 열립니다.

정상적인 JMenu 동작을 피하기 위해 노력하고 있지만 이것이 가능하면 어떤 생각이 들지는 알 것입니다.

답변

1

이것은 매우 구체적인 것이고 많은 사람들이 이것을하는 지 알지 못합니다. :) 어쨌든 누군가가 필요로 할 때를 대비해 해결책을 남깁니다.

먼저 이러한 변경 사항이 UI 클래스에서 수행된다는 것을 알아야합니다. BasicMenuItemUI와 BasicMenuUI에는 모두 마우스 이벤트를 처리하는 내부 클래스 Handler가 있습니다. BasicMenuUI의 내부 클래스 Handler는 BasicMenuItemUI에서 내부 클래스 Handler를 확장하고 private 및 anonymous (각각) 코드를 변경하기가 어렵 기 때문에 BasicMenuItemUI에서 내부 클래스 Handler를 확장합니다. 그러나 두 경우 모두 이전 단락에서 설명한 Handler를 가리키는 보호 된 Handler가 있습니다.

그래서 솔루션으로 이러한 보호 된 처리기를 MyOwnBasicMenuUI 및 MyOwnBasicMenuItemUI 구현에서 확장하고 내 자신의 동작을 적용했습니다. 이제 사용자가 클릭 할 때만 열리는 JMenu가 있으며 사용자가 다른 곳을 클릭 할 때까지 열려 있습니다. 누군가 자세한 내용을 원하면 제공 할 수 있습니다.

감사합니다.

+0

[SSCCE] (http://sscce.org/)를 제공 할 수 있습니까? 나는 똑같은 일을하고 싶다. 고맙습니다. –