JDesktopPane - как получить активный кадр - PullRequest
8 голосов
/ 17 декабря 2011

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

Ответы [ 3 ]

11 голосов
/ 17 декабря 2011

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

2 голосов
/ 17 декабря 2011

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

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

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

2 голосов
/ 17 декабря 2011

Сделайте List<JInternalFrame> и отметьте isSelected() во время итерации.

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

...