2011-12-17 3 views
8

Как получить активный (с фокусом) кадр (JInternalFrame), который находится внутри JDesktopPane? Мне это нужно для моего блокнота MDI (не то, чтобы кто-то использовал это, просто учебный проект). Глядя на api, я вижу только функции, чтобы получить все JInternalFrames, а не активные.JDesktopPane - как получить активный кадр

ответ

10

Используйте JDekstopPane.getSelectedFrame() метод (Из док:. В настоящее время активный JInternalFrame в этом JDesktopPane, или нуль, если JInternalFrame не активна в данный момент) или JDesktopPane.getAllFrames(), чтобы получить список всех JInternalFrames в данный момент отображается на рабочем столе и проверьте isSelected() метод.

+1

Спасибо. Ты действительно помог мне. Я искал что-то вроде getActiveFrame или getFocusedFram и пропустил getSelectedFrame;) –

+1

+1 для использования API. – camickr

2

Сделайте List<JInternalFrame> и проверьте isSelected(), как вы итерации.

Приложение: См. Также этот example, который использует Action для выбора внутренней рамки из меню.

+3

Обратите внимание, что [JDesktopPane.getAllFrames()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JDesktopPane.html#getAllFrames()) возвращает массив, поэтому вы можете а также просто перебрать массив (вместо использования списка). –

+1

-1 для изобретательства колеса. Будет использоваться либо getSelectedFrame(), либо getAllFrames(). – camickr

+0

Это честный полицейский. – trashgod

2

Вы посмотрели учебник по Java под названием How to Use Internal Frames? В вашем коде вам нужен InternalFrameListener (API) (Tutorial) и слушать активировать/деактивировать события. Активированный означает, что внутренняя рама была поднята наверх; деактивировано означает, что он больше не на вершине. Начиная с JDesktopPane, вы можете также установить z-порядок компонентов, добавленных к нему.

Не перебирайте все панели - используйте события.

Если по какой-либо причине вы предпочитаете опросить свой пользовательский интерфейс, а не использовать подход, управляемый событиями, вы можете позвонить getSelectedFrame, который возвращает активную JInternalFrame. Я не знаю, почему никто не упомянул об этом.

+0

+1 для свободной связи. Можете ли вы уточнить? – trashgod

+0

@trashgod это довольно просто, поскольку 'JInternalFrames' создаются с помощью' InternalFrameListener', каждый из которых отслеживает, какой кадр активен, а какой нет. Я немного обновил свой ответ, если плакат не заботится о событиях - 'JDesktopPane' имеет метод' getSelectedFrame'. – Paul

+0

> В вашем коде вам нужен InternalFrameListener (API) (Учебник) и прослушивайте, чтобы активировать/деактивировать события. > Активированный означает, что внутренняя рама была поднята наверх; деактивировано означает, что он больше не на вершине. > Поскольку JDesktopPane расширяет JLayeredPane, вы также можете добавить к нему добавленный компонент z-порядка ». Другими словами, еще один совет:« Как сделать ваш код более запутанным и менее простым ». Спасибо, хотя я сохраню мой код настолько прост, что даже если вы никогда не использовали Java, вы бы это поняли. –