Как получить активный (с фокусом) кадр (JInternalFrame), который находится внутри JDesktopPane? Мне это нужно для моего блокнота MDI (не то, чтобы кто-то использовал это, просто учебный проект). Глядя на api, я вижу только функции, чтобы получить все JInternalFrames, а не активные.JDesktopPane - как получить активный кадр
ответ
Используйте JDekstopPane.getSelectedFrame() метод (Из док:. В настоящее время активный JInternalFrame в этом JDesktopPane, или нуль, если JInternalFrame не активна в данный момент) или JDesktopPane.getAllFrames()
, чтобы получить список всех JInternalFrames
в данный момент отображается на рабочем столе и проверьте isSelected()
метод.
Сделайте List<JInternalFrame>
и проверьте isSelected()
, как вы итерации.
Приложение: См. Также этот example, который использует Action
для выбора внутренней рамки из меню.
Обратите внимание, что [JDesktopPane.getAllFrames()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JDesktopPane.html#getAllFrames()) возвращает массив, поэтому вы можете а также просто перебрать массив (вместо использования списка). –
-1 для изобретательства колеса. Будет использоваться либо getSelectedFrame(), либо getAllFrames(). – camickr
Это честный полицейский. – trashgod
Вы посмотрели учебник по Java под названием How to Use Internal Frames? В вашем коде вам нужен InternalFrameListener
(API) (Tutorial) и слушать активировать/деактивировать события. Активированный означает, что внутренняя рама была поднята наверх; деактивировано означает, что он больше не на вершине. Начиная с JDesktopPane
, вы можете также установить z-порядок компонентов, добавленных к нему.
Не перебирайте все панели - используйте события.
Если по какой-либо причине вы предпочитаете опросить свой пользовательский интерфейс, а не использовать подход, управляемый событиями, вы можете позвонить getSelectedFrame
, который возвращает активную JInternalFrame
. Я не знаю, почему никто не упомянул об этом.
+1 для свободной связи. Можете ли вы уточнить? – trashgod
@trashgod это довольно просто, поскольку 'JInternalFrames' создаются с помощью' InternalFrameListener', каждый из которых отслеживает, какой кадр активен, а какой нет. Я немного обновил свой ответ, если плакат не заботится о событиях - 'JDesktopPane' имеет метод' getSelectedFrame'. – Paul
> В вашем коде вам нужен InternalFrameListener (API) (Учебник) и прослушивайте, чтобы активировать/деактивировать события. > Активированный означает, что внутренняя рама была поднята наверх; деактивировано означает, что он больше не на вершине. > Поскольку JDesktopPane расширяет JLayeredPane, вы также можете добавить к нему добавленный компонент z-порядка ». Другими словами, еще один совет:« Как сделать ваш код более запутанным и менее простым ». Спасибо, хотя я сохраню мой код настолько прост, что даже если вы никогда не использовали Java, вы бы это поняли. –
Спасибо. Ты действительно помог мне. Я искал что-то вроде getActiveFrame или getFocusedFram и пропустил getSelectedFrame;) –
+1 для использования API. – camickr