2011-12-17 2 views
8

JDesktopPane의 액티브 (포커스를 가지는) 프레임 (JInternalFrame)을 얻는 방법은? 내 MDI 메모장 (누구나 사용하는 것이 아니라 단지 교육 프로젝트)에 필요합니다. API를 보면 모든 JInternalFrames를 가져 오는 기능 만 볼 수 있으며 활성 상태는 아닙니다.JDesktopPane - 액티브 한 프레임의 취득 방법

답변

10

사용 JDekstopPane.getSelectedFrame() 방법 (문서에서 :.이 JDesktopPane에 현재 활성화 된 JInternalFrame를, 또는 더 JInternalFrame가 현재 활성화하지 않는 경우는 null) 또는 JDesktopPane.getAllFrames() 현재 바탕 화면에 표시된 모든 JInternalFrames의 목록을 얻을 isSelected() 방법을 확인합니다.

+1

감사합니다. 당신이 정말로 나를 도왔습니다. getActiveFrame 또는 getFocusedFram 및 getSelectedFrame;을 (를) 찾았습니다.) –

+1

+1을 사용합니다. – camickr

2

그래도 반복하면서 List<JInternalFrame>을 만들고 isSelected()을 확인하십시오.

부록 : Action을 사용하여 메뉴에서 내부 프레임을 선택하는이 example도 참조하십시오.

+3

[JDesktopPane.getAllFrames()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JDesktopPane.html#getAllFrames())는 배열을 반환하므로 배열을 반복합니다 (목록을 사용하는 대신). 휠 재발 명을위한 –

+1

-1. getSelectedFrame() 또는 getAllFrames()가 사용됩니다. – camickr

+0

공정한 경찰입니다. – trashgod

2

How to Use Internal Frames이라는 Java 자습서를 보셨습니까? 코드에서 InternalFrameListener (API) (Tutorial)이 필요하고 이벤트를 활성화/비활성화하는 것을 청취하십시오. 활성화 란 내부 프레임이 맨 위로 이동했음을 의미합니다. 비활성화 됨이 더 이상 표시되지 않습니다. JDesktopPane이 (가) JLayeredPane까지 확장되었으므로 추가 된 구성 요소의 z- 순서를 설정할 수도 있습니다.

모든 창 - 이벤트를 반복하지 마십시오.

이벤트 구동 방식을 사용하는 대신 UI를 폴링하려는 경우 getSelectedFrame을 호출하면 활성 JInternalFrame이 반환됩니다. 왜 아무도 그걸 언급하지 않은 이유는 모르겠습니다.

+0

+1 느슨한 커플 링의 경우. 당신은 정교 할 수 있습니까? – trashgod

+0

@trashgod 'JInternalFrames'가 만들어지기 때문에 꽤 쉽습니다. InternalFrameListener가 어떤 프레임이 활성인지 아닌지를 추적하는 각각에 첨부됩니다. 포스터가 이벤트를 신경 쓰지 않을 경우를 대비해 내 대답을 조금 업데이트했습니다.'JDesktopPane'에는'getSelectedFrame' 메서드가 있습니다. – Paul

+0

> 코드에서 InternalFrameListener (API) (자습서)가 필요하고 이벤트를 활성화/비활성화하는 것을 청취하십시오. > 활성화 됨은 내부 프레임이 맨 위로 이동되었음을 의미합니다. 비활성화 됨이 더 이상 표시되지 않습니다. > JDesktopPane은 JLayeredPane을 확장하므로 추가 된 구성 요소의 z 순서를 설정할 수도 있습니다. " "코드를 더 혼란스럽고 덜 직관적으로 만드는 방법 "에 대한 또 다른 팁 감사합니다. 내 코드가 너무 단순하기 때문에 자바를 전혀 사용하지 않더라도 이해할 수있을 것이다. 바퀴를 재발 명하는 데있어서 –