2009-12-14 4 views
0

JTree에서 노드를 마우스 오른쪽 버튼으로 클릭 할 때 JPopupMenu를 표시하는 JTree가 있습니다. JTree에서 선택한 노드를 기반으로하는 JPopupMenu에서 특정 JMenuItems를 숨기거나 표시하거나 설정/해제하는 가장 좋은 방법은 무엇입니까?JTree의 선택에 따라 JPopupMenu의 JMenuItems 표시/숨기기

첫 번째 해결책은 TreeSelectionListener를 'value changed'이벤트에 대한 JTree에 추가하는 것입니다. 이벤트 처리 코드에서 TreeSelectionEvent의 getNewLeadSelectionPath() 메서드를 사용하여 가장 최근의 선택 항목의 경로를 가져오고 결과 TreePath 객체의 getLastPathComponent()를 사용하여 선택된 노드를 가져옵니다. 여기에서 내 JPopupMenu 객체에 액세스하고 특정 JMenuItems를 숨기거나 표시하는 데 필요한 수정 작업을 수행하는 일련의 IF 문이 있습니다.

그러나 이것에 대해 뭔가가 느껴지므로 더 나은 접근 방법이 있는지 물어볼 것입니다.

답변

1

내 응용 프로그램 내에서이 문제를 해결하기 위해 선택한 방법은 노드와 함께 원하는 모든 데이터를 저장할 수있는 DefaultMutableTreeNode 클래스의 "userObject"속성을 사용하는 것이 었습니다. 나는 "createPopupMenu()"메서드를 정의하는 추상 기본 클래스에서 확장되는 다양한 유형의 것들을 가지고있다. 그런 다음 선택 리스너 (질문에서 설명한대로)에서 사용자 개체를 가져 와서 선택한 개체에 적합한 팝업 메뉴를 만들고 표시하도록 요청합니다.

1

선택한 트리 노드를 가져 오는 것은 간단하며 설명대로 작동해야합니다. 팝업 메뉴를 수정하려면 Action을 사용하는 것이 좋습니다. 이렇게하면 라이브 메뉴를 수정할 필요가없고 예를 들어 추가 할 수도 있습니다. JToolBar에는 메뉴의 항목과 동일한 방식으로 반응하는 것과 동일한 동작이 포함되어 있습니다.

관련 문제